我比較新線程在java中,我試圖做以下工作。兩個線程將運行。 Thread1將從1-10打印,然後等待Thread2完成打印11-20,然後完成其任務並通知thread1打印21-30,然後thread1也將終止。 這是我使用的代碼:等待一個線程在java中完成
private Thread thread = null;
private String name = null;
private static Object obj = new Object();
private static int index = 1;
public childThread(Thread t, String name)
{
this.name = name;
this.thread = t;
}
public void run()
{
try
{
while (true) {
Thread.sleep(500);
if (index % 10 == 0 && index == 10) {
System.out.println("Waiting for Thread2");
synchronized (obj) {
obj.notify();
obj.wait();
}
}
else if (index % 10 == 0 && index == 20) {
System.out.println("Waiting for Thread1");
synchronized (obj) {
obj.notify();
obj.wait();
}
}
else if(index == 30)
{
obj.wait();
}
synchronized (obj) {
System.out.println(name + " ><>< " + index);
index++;
}
}
}
catch(Exception e)
{
}
而且我得到以下輸出:基於Java中的線程我目前的理解
Thread2 ><>< 1
Thread1 ><>< 2
Thread2 ><>< 3
Thread1 ><>< 4
Thread2 ><>< 5
Thread1 ><>< 6
Thread1 ><>< 7
Thread2 ><>< 8
Thread2 ><>< 9
Thread1 ><>< 10
Thread2 ><>< 11
Thread1 ><>< 12
Thread2 ><>< 13
Thread1 ><>< 14
Thread2 ><>< 15
Thread1 ><>< 16
Thread2 ><>< 17
Thread1 ><>< 18
Thread2 ><>< 19
Waiting for Thread1
Waiting for Thread1
Thread1 ><>< 20
Thread1 ><>< 21
Thread1 ><>< 22
Thread1 ><>< 23
Thread1 ><>< 24
Thread1 ><>< 25
Thread1 ><>< 26
Thread1 ><>< 27
Thread1 ><>< 28
Thread1 ><>< 29
。
如果(指數%10 == 0 & &索引== 10)塊將通知其它的線程來運行,並等待其它完成並同樣適用於第二個。現在它不是第一次工作。但是當索引== 20時,thread2停止工作並且thread1繼續打印30。
感謝您的幫助。 :)
'等待()'和'通知()'是低級同步原語。如果你想等待另一個線程的動作,那麼通常你需要'java.util.concurrent.Semaphore'或'java.util.concurrent.CountDownLatch' – NamshubWriter 2015-04-05 05:34:38