JAVA多线程嵌套问题,A里开B,若把A关闭,B呢?

public class A extends Thread{
public void run(){
B b = new B();
b.start();
b.join();
}
}
还有个问题想问,就是知道了线程的ID怎么得到对应的线程对象??回答后上分

b仍然运行。

像这种问题,学习最好的办法是自己做一个简单实验, 这样可以大大提高你的代码水平,我就是这样过来的,

希望楼主进步. java其实很容易

public class AWTest {
boolean f=true;
public AWTest(){
frame=new Frame("测试程序 按ESC键退出");
frame.setSize(width, height);
frame.setBackground(Color.GRAY);
canvas=new TheCanvas(width,height,this);
frame.add(canvas);
frame.pack();
frame.setVisible(true);

f=true;
Thread t1=new Thread(
new Runnable(){
public void run() {
new Thread(
new Runnable(){ public void run() { while(true){ System.out.println("我是第二个线程,我一直在运行"); } } }).start();
while(f){ System.out.println("我是第一个线程我,一直在运行");
}
}}
);

t1.start();
try {
Thread.sleep(3000);
f=false;//关闭t1
} catch (InterruptedException e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
new AWTest();
}

}

另外,楼的想问什么id,我估计你是上次问怎么管理很多线程的那个人吧
这样:
你要用个hashtable来存所有线程地象
每生成一个线程就把它可存到哈希表中。哈希表需要一个id做主键,
你知道id的话就能从表中把线程实例找回来,把线程的停止标志位改变就行了

设Runnable对象中有标志位flag=true;
并且run函数写成
while(flag){//永不停止
//.....
}

每次生成一个线程实例就加到hashtable中
Hashtable table=new Hashtable();
.....

//生成1000个线程,并启动
for(int i=0;i<1000;i++){
MyRunnable r1=new MyRunnable ();
r1.flag=true;
table.put(""+i, r1);//加入到哈希表,数字字符串做索引主键 key(id)
new Thread(r1).start();
}

//现在,如果你想停止某个线程,假设你要停第999个
MyRunnable r=(MyRunnable )table.get("999");
r.flag=false;// r线程的死循环可以退出了,从而结束该线程
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-12-27
join() 等待该线程终止 是受控异常 必须加try catch 语句 线程上锁
b.join()他是给b线程上锁。必须等待该线程结束 其他的线程才能关闭它。
第2个回答  2008-12-27
b没有任何反映
就是你你关闭a之前b是什么样子就还是什么样子
相似回答