java多线程的线程组问题,帮忙,先给50分解答了再给50,因为我有很多问题没有人答了(50分)

  • 主题发起人 主题发起人 低调一贱男
  • 开始时间 开始时间

低调一贱男

Unregistered / Unconfirmed
GUEST, unregistred user!
//testaccess.java 线程群组(Thread group)

class testthread1 extends Thread{//线程
private int i;

testthread1(ThreadGroup g, String name){
super(g,name);
// System.out.println(this.getName());
}

void f(){
i++;
System.out.println(getName()+"f()");
}
}
class testthread2 extends testthread1{
testthread2(ThreadGroup g , String name){
super(g,name);
start();//开始线程
}

public void run(){
ThreadGroup g=getThreadGroup().getParent().getParent();//取得上两级父线程组,即为x ThreadGroup
// System.out.println(this.getName());
// g.list();
Thread[] gall=new Thread[g.activeCount()];
//取得线程组内的线程数
g.enumerate(gall);
//会将指向"先前产生之线程"的所有references置于数组gall中

// System.out.println(gall.toString());
for(int i=0;
i<gall.length;
i++){
System.out.println(gall);
// gall.setPriority(Thread.MIN_PRIORITY);//将优先级设置为最低 //为什么有个空指针???????????
// ((testthread1)gall).f();
}
g.list();
}
}
public class testaccess{
public static void main(String[] args){
ThreadGroup
x=new ThreadGroup("x"),
y=new ThreadGroup(x,"y"),
z=new ThreadGroup(y,"z");
Thread
one=new testthread1(x,"one"),
two=new testthread2(z,"two");
}
}
/*结果
java.lang.ThreadGroup[name=x,maxpri=10]
Thread[one,5,x]
java.lang.ThreadGroup[name=y,maxpri=10]
java.lang.ThreadGroup[name=z,maxpri=10]
Thread[two,5,z]
twof()
java.lang.NullPointerException
at testthread2.run(testaccess.java:29)
Press any key to continue...
*/
 
老兄,你的那幅插图真讨厌
我要发一个消息给别人,刚打开在线富翁就跳出来让我安装什么鬼玩意,K
哪知道上面有没有毒
可否不要这么无聊
 
改了,先回答我的问题吧,你占了一个位
 
把分给我吧 :))
>>Thread[] gall=new Thread[g.activeCount()];
>>g.enumerate(gall);
改为:
Thread[] gall=new Thread[g.activeCount()];

int count=g.enumerate(gall);
//注意这里
for(int i=0;
i<count;
i++){
System.out.println(gall);
gall.setPriority(Thread.MIN_PRIORITY);
((testthread1)gall).f();
}
因为在activeCount与enumerate之间可能有一个或者多个线程结束,所以不能依靠
gall.length来做处理,仅将activeCount的返回值作为数组可能大小的最大值,而
应将enumerate返回的值作为对该方法调用时的活跃线程的数目,因此你才会有空指针异常。

 
那我怎么才能将g中的所有线程加入到gall[]里面了,不吝赐教
 
>>那我怎么才能将g中的所有线程加入到gall[]里面了
如果你将线程组中的所有线程加入到数组中,那你也没必要用
activeCount()与enumerate了呀,enumerate()方法是捕获对所有活动线程的引用
而不管线程组。
 
因为我不知道怎么取得所有线程数,只有一个activeCount()
 
接受答案了.
 

Similar threads

后退
顶部