java 怎样得到创建的所有线程 程序开了2个子线程,现在要让所有的线程发送同一个消息,我就要得到所有的子线程,这个怎么搞,谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 让所有的线程发送同一个消息,什么意思啊,run()方法相同不就行了吗 看看这个例子就明白了,一共三个线程。其中main线程是jvm自动启动的。public class AllThread { /** * @param args */ public static void main(String[] args) { new Thread("thread1") { public void run() { for (int i = 0; i < 2; i++) { try { Thread.sleep(500); } catch (Exception e) { } } } }.start(); new Thread("thread2") { public void run() { for (int i = 0; i < 2; i++) { try { Thread.sleep(500); } catch (Exception e) { } } } }.start(); ThreadGroup tg = Thread.currentThread().getThreadGroup(); Thread[] threads = new Thread[20]; int count = tg.enumerate(threads); for (int i = 0; i < count; i++) { System.out.println(threads[i].getName()); } }} 不行,提示说at java.lang.ThreadGroup.enumerate(Unknown Source) 代码: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 Handler3: Finalizer4: Signal Dispatcher5: Attach Listener1: main最好别操作前 4 个系统线程。 是运行通不过还是编译出错?换成int count = tg.enumerate(threads, false);试试 可以运行,结果mainthread1thread2 2: Reference Handler3: Finalizer4: Signal Dispatcher5: Attach Listener上面 4 个是系统级线程,Java 应用程序启动后它们会被自动创建并启动,如果使用了 AWT 或 Swing,还会有更多线程被自动创建并启动以处理窗体事件等。其中 Finalizer 是处理垃圾回收的。1: main这个是与 main 方法对应的主线程。 字节转换问题 查看API很重要吗? hibernate级联查询 java解析xml,有没有类似的得到某个元素的innerxml的功能? 请教数据库连接的问题!!! 控制台怎么录入数据阿??谢谢 java中 switch case 语句的用法问题! 如果只允许用户每次只能在同一台机器登陆我的会员系统(jsp),有什么办法吗? 请教怎么在java中得到oracle中所有的自定义的表名?又怎样得到一个表的所有字段信息?谢谢 中间件? 求时间差的问题 怎么让键盘事件在整个Frame上响应啊?
* @param args
*/
public static void main(String[] args) {
new Thread("thread1") {
public void run() {
for (int i = 0; i < 2; i++) {
try {
Thread.sleep(500);
} catch (Exception e) {
}
}
}
}.start();
new Thread("thread2") {
public void run() {
for (int i = 0; i < 2; i++) {
try {
Thread.sleep(500);
} catch (Exception e) {
}
}
}
}.start(); ThreadGroup tg = Thread.currentThread().getThreadGroup();
Thread[] threads = new Thread[20];
int count = tg.enumerate(threads);
for (int i = 0; i < count; i++) {
System.out.println(threads[i].getName());
} }}
at java.lang.ThreadGroup.enumerate(Unknown Source)
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 个系统线程。
可以运行,结果
main
thread1
thread2
2: Reference Handler
3: Finalizer
4: Signal Dispatcher
5: Attach Listener上面 4 个是系统级线程,Java 应用程序启动后它们会被自动创建并启动,如果使用了 AWT 或 Swing,还会有更多线程被自动创建并启动以处理窗体事件等。其中 Finalizer 是处理垃圾回收的。1: main这个是与 main 方法对应的主线程。