Jak*_*man 1 java multithreading
所以我对多线程如何工作有点困惑.例如,如果我创建一个Thread被调用的子类MySub,这就是它的样子:
public class MySub extends Thread {
public void run {
for(int i = 0; i < 5; i++){
System.out.println(i);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在主要课程中我这样做:
public static void main(String[] args) {
Thread m = new MySub();
Thread m2 = new MySub();
m.start();
m2.start();
}
Run Code Online (Sandbox Code Playgroud)
它不应该调用start()方法m,然后直接调用start()方法m2,而不是等待m线程完成?这不是多线程的重点吗?
但实际上,它会从start()呼叫中打印0到4 m,然后从0到4打印start()呼叫m2.他们没有同时进行,他们顺序进行,这不是我的预期.我有点期待一堆乱0到4的数字.
这是一场竞争条件@Jake.你main是不是等待第一个线程启动第二前完成.它开始第一个完成其工作的线程,然后 main才有机会启动第二个线程.
如果您尝试打印(比方说)1000个数字或需要更多时间的东西,您会开始看到它们交错.或者你可以Thread.sleep(10)在你的println陈述之间加上一个更具体的陈述.
仅供参考:建议您上课implement Runnable而不是extends Thread.然后你会做:
Thread m1 = new Thread(new MySub());
m1.start();
Run Code Online (Sandbox Code Playgroud)
此外,ExecutorService建议使用代码而不是直接使用线程.
| 归档时间: |
|
| 查看次数: |
100 次 |
| 最近记录: |