经典程序,能查看你启动了多少个线程,但不是很明白细节。

sure2003 2008-10-06 03:31:45
    public static void main(String[] args) {        
ThreadGroup threadGroup= Thread.currentThread().getThreadGroup().getParent();
//不知道java为什么定义了一个ThreadGroup
Thread[] list=new Thread [threadGroup.activeCount()];
threadGroup.enumerate(list,true);
//enumerate这个做什么用的?

for (Thread thread : list) {
System.out.println(thread.getName()+"优先级:"+thread.getPriority());
}
}

结果;
--------------------Configuration: <Default>--------------------
Reference Handler优先级:10
Finalizer优先级:8
Signal Dispatcher优先级:9
Attach Listener优先级:5
main优先级:5

为什么Reference Handler的优先级比主线程还高。
...全文
269 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
meadking 2008-10-09
  • 打赏
  • 举报
回复
线程是不可靠的,java线程和平台相关!
优先级高的,本来就不一定优先处理!
线程的优先级,在sleep之后,就是会随机排序的!

首先,这些我都没有思考,还有,我也没有想过这些东西,官方说的内容,根本不用想!
所以,我不知道你在问什么.
人家官方规范有说明,另外scjp的考试资料也有这些内容!
sure2003 2008-10-09
  • 打赏
  • 举报
回复
线程组一般不推荐使用的吧!

优先级别高的线程却不一定会先完成!
sleep之后就会随机排序了,


4楼的这番话有没有经过思考的。。。。
只是想知道你为什么这么想?
ZangXT 2008-10-06
  • 打赏
  • 举报
回复
lz的问题越来越诡异了
sagezk 2008-10-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 sure2003 的帖子:]
经典程序能查看你启动了多少个线程,但不是很明白细节。
[/Quote]

下面代码用于获取几乎所有 JVM 中的活动线程:
public class AllThread {

public static Thread[] getAllThread() {
ThreadGroup root = Thread.currentThread().getThreadGroup();
ThreadGroup ttg = root;
while ((ttg = ttg.getParent()) != null) root = ttg;
Thread[] tlist = new Thread[(int)(root.activeCount() * 1.2)];
return java.util.Arrays.copyOf(tlist, root.enumerate(tlist, true));
}

public static void main(String[] args) {
Thread[] ts = getAllThread();
for (Thread t : ts) {
System.out.println(t.getId() + ": " + t.getName());
}
}

}


输出:
2: Reference Handler
3: Finalizer
4: Signal Dispatcher
5: Attach Listener
1: main


这几个线程是你启动的?
你那代码能保证获取到所有线程的引用?

搞笑!
前 4 个为 JVM 系统级线程,只要记得别对它们进行操作就行了,至于优先级的高低是根据系统线程的功能和需要来定的。具体功能拿它们名字去 Google。
ouyangxiaokang6 2008-10-06
  • 打赏
  • 举报
回复
不是很好控制,最好不要把一堆线程放一起。
ZangXT 2008-10-06
  • 打赏
  • 举报
回复
当然要比主线程高,要不你主线程跑起来就不进行垃圾回收了?
lisl2003 2008-10-06
  • 打赏
  • 举报
回复
标记,学习一下
malligator 2008-10-06
  • 打赏
  • 举报
回复
Reference Handler优先级:10
Finalizer优先级:8
Signal Dispatcher优先级:9
Attach Listener优先级:5

这几个是JVM的线程啊
猜想高优先级的那两个一个是控制线程通信的,一个用来标记变量引用的(用处之一是用来作垃圾回收(Finalizer?)的)

这些东西是保证线程运行良好的东东,你觉得它们不应该高优先级一点吗?
一头头 2008-10-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xblue3 的回复:]
线程组一般不推荐使用的吧!呵呵

优先级别高的线程却不一定会先完成!
sleep之后就会随机排序了,
[/Quote]

yep, forget ThreadGroup which is a unsuccessful try made by Sun
meadking 2008-10-06
  • 打赏
  • 举报
回复
线程组一般不推荐使用的吧!呵呵

优先级别高的线程却不一定会先完成!
sleep之后就会随机排序了,
一头头 2008-10-06
  • 打赏
  • 举报
回复
最好把线程组看成是一次不成功的尝试, 你只要忽略他就好了。 - Joshua Bloch

enumerate(Thread[] list, boolean recurse)
Copies into the specified array every active thread in this thread group.
natee 2008-10-06
  • 打赏
  • 举报
回复
mark too !
  • 打赏
  • 举报
回复
mark,3ks

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧