如何啓動兩個線程,其中thread1首先執行,當thread1結束時線程2啓動,而主方法線程可以繼續工作而不鎖定另外兩個線程?我已經嘗試過join(),但它需要從線程中調用,必須等待另一個線程,因爲沒有辦法像thread2.join(thread1)這樣做。 如果我在main()內部調用一個連接,我因此有效地停止了主線程的執行,而不僅僅是thread2的執行。當主線程繼續執行時,執行兩個等待另一個線程的線程
因此,我嘗試使用ExecutorService,但同樣的問題。
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class Test
{
public static void main(String args[]) throws InterruptedException
{
System.out.println(Thread.currentThread().getName() + " is Started");
class TestThread extends Thread
{
String name;
public TestThread(String name)
{
this.name = name;
}
@Override
public void run()
{
try
{
System.out.println(this + " is Started");
Thread.sleep(2000);
System.out.println(this + " is Completed");
}
catch (InterruptedException ex) { ex.printStackTrace(); }
}
@Override
public String toString() { return "Thread " + name; }
}
ExecutorService executor = Executors.newCachedThreadPool();
executor.execute(new TestThread("1"));
boolean finished = executor.awaitTermination(1, TimeUnit.HOURS);
if(finished)
{
//I should execute thread 2 only after thread 1 has finished
executor.execute(new TestThread("2"));
}
//I should arrive here while process 1 and 2 go on with their execution
System.out.println("Hello");
}
}
#EDIT:爲什麼我需要這樣的:
我需要這個,因爲從數據庫表線程1份的元素到另一個數據庫,線程2具有複製它引用從線程1複製的表,一個鏈接表。 因此,thread2必須僅在thread1完成時纔開始填充鏈接表,否則數據庫會給出完整性錯誤。 現在想象一下,由於複雜的鏈接表,我有幾個不同優先級的線程,你有一個想法。
你爲什麼需要2個線程,如果他們強制執行了一個又一個? – Tala
我在上面添加了「爲什麼我需要這個」。希望它很明確 – dendini
不是真的,沒有。 –