草庐IT

Multithreading

全部标签

java - Akka 中的轻量级线程

我最近读到Quasar它为JVM提供“轻量级”/类似Go的“用户模式”线程(它也有一个Erlang启发的Actor系统,比如Akka但这不是主要问题)例如:packagejmodern;importco.paralleluniverse.fibers.Fiber;importco.paralleluniverse.strands.Strand;importco.paralleluniverse.strands.channels.Channel;importco.paralleluniverse.strands.channels.Channels;publicclassMain{publ

java - 在单个后台线程定期修改 map 的同时读取 map

我有一个类,我在updateLiveSockets()方法中每30秒从一个后台线程填充一个映射liveSocketsByDatacenter然后我有一个方法getNextSocket()将由多个读取器线程调用以获取可用的实时套接字,该套接字使用相同的映射来获取此信息。publicclassSocketManager{privatestaticfinalRandomrandom=newRandom();privatefinalScheduledExecutorServicescheduler=Executors.newSingleThreadScheduledExecutor();pri

java - Java 线程优先级如何转换为操作系统线程优先级?

JavaAPI线程优先级(1-10)如何转换为操作系统级优先级,因为大多数操作系统没有与之匹配的线程优先级(以数字表示)。因此请记住,是否存在两个或多个具有不同优先级的线程最终在操作系统级别获得相同优先级的情况。请澄清,如果我的理解有一些更正。 最佳答案 确实,某些优先级可以映射到相同的“native”优先级。这是列表(基于OpenJDK6中的Hotspot代码):太阳系1⇒02⇒323⇒644⇒965–10⇒127值得注意的是,在Solaris上,您不能将线程优先级提高到正常以上,只能降低它:5的优先级值与任何更高的值相同。Lin

java - 如何使用 Eclipse 调试 Java 中的死锁

可以使用哪些技术来调试Java程序中看似死锁的问题。我的IDE是Eclipse,我想我已经确定了两个死锁线程。在调试器中,右键单击任何有问题的线程并选择挂起可挂起线程并显示当前正在执行的代码。尝试单步进入或单步跨行问题似乎没有效果-线程状态更改为“单步执行”,除非再次单击暂停,否则控制永远不会返回调试器。谢谢 最佳答案 如果您使用的是SunJVM,则附加JConsole并转到“线程”Pane。有一个“检测死锁”按钮。 关于java-如何使用Eclipse调试Java中的死锁,我们在Sta

Java volatile 变量问题

阅读此DZonearticle关于Java并发我想知道是否有以下代码:privatevolatileListlist;privatefinalLocklock=newReentrantLock();publicvoidupdate(ListnewList){ImmutableListl=newImmutableList().addAll(newList);lock.lock();list=l;lock.unlock();}publicListget(){returnlist;}相当于:privatevolatileListlist;publicvoidupdate(ListnewLis

java - 用于处理并发用户的多线程 GAE servlet

我想对我的GAEservlet进行多线程处理,以便同一个实例上的同一个servlet可以处理多达10个(在前端实例上,我相信最大线程数是10)来自不同的并发请求用户在同一时间,他们每个人之间的时间片。publicclassMyServletimplementsHttpServlet{privateExecutorexecutor;@OverridepublicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse){if(executor==null){ThreadFactorythreadFactory=Thre

java - 在 java 中延迟一段时间后调用方法

场景是这样的:在我的应用程序中,我打开了一个文件,更新并保存了它。一旦文件保存事件被触发,它将执行一个方法abc()。但是现在,我想在保存事件被触发后添加延迟,比如1分钟。所以我添加了Thread.sleep(60000)。现在它在1分钟后执行方法abc()。到目前为止一切正常。但是假设用户在1分钟内保存了3次文件,该方法每1分钟执行3次。我只想在第一次使用最新文件内容调用保存后的1分钟内执行一次方法。我该如何处理这种情况? 最佳答案 使用Timer和TimerTask在YourClassType中创建一个Timer类型的成员变量假

java - 如果我们直接调用 run 方法会发生什么?

我有一个“TestRunnable”类,它通过实现Runnable来覆盖run方法。运行覆盖的运行方法,如下所示:TestRunnablenr=newTestRunnable();Threadt=newThread(nr);t.setName("Fred");t.start();如果我直接调用t.run();如果我们不调用t.start();会发生什么? 最佳答案 run方法只是另一种方法。如果你直接调用它,那么它不会在另一个线程中执行,而是在当前线程中执行。这是我的测试TestRunnable:classTestRunnablei

java - 线程何时超出范围?

我编写了一个程序来计算文本中的行数、单词数和字符数:它使用线程来执行此操作。有时效果很好,但其他时候效果不佳。最终发生的是指向所计数的单词和字符数的变量有时会不足,有时不会。在我看来,线程有时在它们可以计算出它们想要的所有单词或字符之前就结束了。是因为当while(true)循环中断时这些线程超出了范围吗?我在下面包含了我的问题的线程部分的代码:privatevoidcountText(){try{reader=newBufferedReader(newFileReader("this.txt"));while(true){finalStringline=reader.readLine

Java多线程初学者问题

我正在开发一个科学应用程序,它具有可以并行进行的易于分离的部分。因此,我将这些部分作为独立线程编写到每个运行中,尽管这似乎不是将事物分离到线程中的标准原因(即,不阻止某些退出命令等)。几个问题:这真的能在标准多核台式机上给我带来任何好处吗?也就是说,如果我有当前的JVM,线程实际上会在单独的内核上运行吗?还是我必须做其他事情?我几乎没有被所有线程读取(尽管从未写入)的对象。潜在的问题?那些问题的解决方案?对于实际的集群,您能否推荐将线程分配到各个节点的框架,这样我就不必自己管理(好吧,如果存在的话)?澄清:我的意思是,要么自动将线程转换为单个节点的任务,要么使整个集群看起来像一个JVM