public static void main(String[] args) throws Exception {
Thread t2 = new Thread(new Runnable() {
public void run() {
try {
// for (int i = 0; i < 50; i++) {
// System.out.println(i + "b");
// Thread.sleep(100);
// }
System.out.println("bbbb");
} catch (Exception e) {
e.printStackTrace();
}
}
});
final Thread t1 = new Thread(new Runnable() {
public void run() {
try {
// System.out.println("a");
t2.join();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("aaaa");
}
});
t2.start();
// Thread.sleep(1000);
t1.start();
for (int i = 0; i < 10; i++) {
t2.run();// run方法会 受到线程生命周期的影响
t1.run();
}
}
在实际的测试中
输出
aaaa
bbbb
bbb
或者
bbbb
aaaa
aaaa
aaaa
都是有可能的
所以答案: 是不确定的
1.因为 t1 t2 都进入就绪状态后谁先执行, 是无法预测的
2.for循环中的 run()调用, 前提是 线程还活着, 因为系统会调用exit()方法把 target对象赋值为null, 而run方法中有 非空检测