什么定义了“活动”线程?

时间:2012-04-28 02:15:00

标签: java concurrency

在Java并发中,什么使线程“活动”?只是它没有空转的事实?从技术角度来看,“等待”或“暂停”线程是否仍在考虑中?

5 个答案:

答案 0 :(得分:5)

据我所知,“主动”这个词似乎被大量使用但从未被定义过。 ThreadGroup.enumerate()方法记录在:

  

将此线程中的每个活动线程复制到指定的数组中   小组及其小组。

来自looking at the source for this,它正在检查Thread.isAlive()方法并将其添加到可枚举中。由此我推断出术语“活跃”和“活着”是可以互换的,“活着”定义为:

  

如果一个线程已经启动并且尚未死亡,则该线程处于活动状态。

答案 1 :(得分:2)

看看java.lang.Thread.State

在其他非Java系统中,active等同于“RUNNABLE”。如果任务/进程/线程能够主动运行代码,则它处于活动状态。如果不是(阻塞等),它将被暂停

正如斯蒂芬C所说,在这里,主动被用作英语而不是Java。

答案 2 :(得分:1)

在此上下文中,我将“active”表示他们正在执行代码。非活动线程 - 在I / O调用或等待锁定时被阻塞的线程 - 仅占用内存资源而不会影响CPU(或仅略微)。

但是,它实际上取决于你的线程在做什么。如果每个线程都在迭代数字以计算质数,那么它们完全受CPU限制,并且每个核心实际上应该只有一个以最大化吞吐量。如果他们正在发出HTTP请求或执行文件I / O,那么每个核心可以承受不少。

最后,一般覆盖所有线程而不考虑他们正在做什么的一揽子声明是毫无价值的。

我强烈推荐本书Java Concurrency in Practice,以便对并发Java编程主题进行高质量的处理。

答案 3 :(得分:0)

单词" active"在这里正常使用英语。

活跃一词的正常英语含义是"做某事"。所以"活跃"的直观含义对于线程来说,它们实际上正在执行或准备执行。

在此引文的上下文中:

  

"通常可以接受每个核心有4到20个活动线程"

这个词"活跃"与此一致使用,尽管我对数字进行了狡辩。 (20太高了,国际海事组织)。

但是,我认为这是一个故意模糊的陈述。赠品是使用黄鼠狼的短语"它被普遍接受" (而不是引用任何特定来源)和广泛的范围(" 4 - 20")。因此,你可以说“" active"是故意模糊的另一个例子。

IMO,这句话的作者试图说出“太多线程不好" ......没有准确地知道什么"太多"是。通过将活动的含义与“活跃的”结合起来,提取更精确的指导。毫无意义。 (要明确的是,不可能说多少"太多"一般来说......)

答案 4 :(得分:0)

  

“每个核心有4到20个活动线程通常是可以接受的”。 - Adam Tannon

从这个意义上来说,我认为这个词的意思是“准备好”,而不是“活着”或任何其他可能的含义。在就绪队列中只有少数几个线程是有意义的,因为您没有获得等待线程的任何值,并且您有助于调度和上下文切换开销。另一方面,如果准备运行的线程数少于核心数,则表示您没有使用可用资源。