为什么A类的线程一直等到B类的线程结束?在本示例中,代码打印System.out.println
从不执行。我怎么才能解决这个问题?
public class A implements Runnable {
public A() {
Thread t = new Thread(this);
t.start();
}
public static void main(String[] args) {
A tmp = new A();
}
public void run() {
B tmp = new B();
tmp.run();
System.out.println("Hello");
}
}
class B implements Runnable {
public B() {
}
public void run() {
while (true) {
}
}
}
发布于 2016-07-04 06:59:52
tmp.run();
在主线程中运行,而不是在单独的Thread
中运行,因为您没有将B作为单独的线程启动。
以上一行应改为
new Thread(tmp).start();
您已经正确地启动了线程A(通过使用start()方法),并且没有复制线程B。
请参阅关于在两个方法中启动线程的oracle文档链接:
Runnable
接口定义一个方法run,用于包含线程中执行的代码。另外,线程B在无限循环中运行,没有退出条件。如果不是有意的,那么在run()
方法中添加一个退出条件。
发布于 2016-05-18 19:45:09
这段代码:
B tmp = new B();
tmp.run();
System.out.println("Hello");
不会启动线程。只有一个线程生成,它调用b.run()
。所以线程a
只是挂在b.run()
中的无穷无尽的循环中。只需为可运行的“b”创建另一个线程即可,一切都应如预期的那样工作:
public void run() {
Thread t = new Thread(new B());
t.start();
System.out.println("Hello");
}
https://stackoverflow.com/questions/37308765
复制相似问题