【发布时间】:2017-08-17 23:47:33
【问题描述】:
public class SousThread implements Runnable {
private int i;
public SousThread() {
this.i = 0;
}
@Override
public void run() {
while(true) {
System.out.println("I'm sousthread " + i++);
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class TestThread implements Runnable {
@Override
public void run() {
System.out.println("I'm thread");
SousThread st = new SousThread();
Thread td = new Thread(st);
td.start();
System.out.println("thread finished");
}
public static void main(String[] args) {
TestThread tt = new TestThread();
Thread td = new Thread(tt);
td.start();
System.out.println("main finished");
}
}
我正在尝试在线程 TestThread 中创建线程 SousThread。 SousThread 是无限的。
令我惊讶的是,我得到以下结果:
I'm thread
main finished
thread finished
I'm sousthread 0
I'm sousthread 1
I'm sousthread 2
I'm sousthread 3
I'm sousthread 4
I'm sousthread 5
...
...
这是否意味着main 方法已完成而线程尚未完成?这可能吗?这安全吗?如果没有,有什么更好的方法?
更新
因为这样的代码在 C++ 中不起作用。所以我只想知道代码在 Java 中是否没有任何问题或任何风险。
【问题讨论】:
-
更好的方法来做什么? “这可能吗?”嗯,很明显。 “这里安全吗?”以何种方式安全?
-
@Kayaman
main已经结束,但是属于main的线程还没有结束。这对你来说不重要吗? -
不是特别清楚,但这可能是因为我了解线程在 Java 中的工作原理。
-
@Kayaman 所以我们能不能这样做?
-
你刚刚做到了,不是吗?
标签: java multithreading