new SampleClass().start().join(); This is wrong.
您可以通过
SampleClass samClass = new SampleClass();
samClass.start();
samClass.join()
上面的代码实现类似的事情都会有你想要的效果相同。
现在你的问题是按顺序运行线程。 在大多数这些 的情况下,你不需要线程顺序执行(但是有一些情况)。 那么如果你不得不。
然后你就可以像这样
Thread t1 = ..
Thread t2 = ..
t1.start();
t1.join();
t2.start(); // t2 will start only when t1 dies
t2.join(); //
t3.start(); // t3 will start only when t2 dies..
但上面的方法并不好。因为要启动其他线程,需要先前线程 。在实践中,我们应该考虑将线程创建为昂贵的操作 并尝试重用。
真正的问题往往就是这样,你必须执行的任务T1,T2,T3,T4 顺序,但在不同的线程T1 & & T3必须在一个线程运行,T2和T4 必须在另一个运行。 所以在这里我们可以使用两个线程而不是4个。 线程1将上 即
Thread1 -> T1
Thread2 -> T2
Thread1 -> T3
Thread2 -> T4
运行T1,然后线程2将运行T2,然后线程1将运行T3等所有任务将被顺序地但仅使用2个线程执行。
你能解决这个问题,像下面
Thread1 ->run {
while(canIrun) {
executeTask(taskQueue1.next());
notifyThread2();
waitForThread2Signal();
}
}
Thread2 -.run {
while(canIrun) {
waitForThread1Signal();
executeTask(taskQueue2.next());
notifyThread1();
}
}
等待和通知方法可以很容易使用的CyclicBarrier来实现。
嗯......这个问题可以通过花2分钟阅读javadocs来回答。 –
我已经看过这里 http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Thread.html#join%28%29 但我还没有找到任何有用的信息给我。 – Emanuele