/**
* 指定執行緒執行順序:通過synchronized共享物件鎖加上volatile可見變數來實現
*/public class threadorder
for (int i = 0; i < 2; i++)
ordernum = 2;
notifyall();
} catch (interruptedexception e)
}public synchronized void methodb()
for (int i = 0; i < 2; i++)
ordernum = 3;
notifyall();
} catch (interruptedexception e)
}public synchronized void methodc()
for (int i = 0; i < 2; i++)
ordernum = 1;
notifyall();
} catch (interruptedexception e)
}}
共享物件鎖,可以保證每個方法只能同時有乙個執行緒進入,配合wait和notifyall方法,可以啟動或者喚醒執行緒。
join()方法的意思是等待執行緒執行完程式後死亡。
測試類:
public class threadordertest
});thread thread2 = new thread(new runnable()
});thread thread3 = new thread(new runnable()
});thread1.start();
thread1.join();
thread2.start();
thread2.join();
thread3.start();
thread3.join();
}}
執行結果:
aaa
bbbccc
class t1 extends thread catch (interruptedexception e)
system.out.println("in t1");
}}class t2 extends thread
public void run() catch (interruptedexception e)
system.out.println("in t2");
}}class t3 extends thread
public void run() catch (interruptedexception e)
system.out.println("in t3");
}}public class test
}
執行結果:
in t1
in t2
in t3
public class testjoin
}, "t1");
final thread t2 = new thread(new runnable() catch (interruptedexception e)
}}, "t2");
final thread t3 = new thread(new runnable() catch (interruptedexception e)
}}, "t3");
// method1
// method 2 使用 單個任務的執行緒池來實現。保證執行緒的依次執行
executorservice executor = executors.newsinglethreadexecutor();
executor.submit(t1);
executor.submit(t2);
executor.submit(t3);
executor.shutdown();
}}
建立乙個只有乙個執行緒的執行緒池來操作不限數量的佇列,也就是把執行緒放進了乙個佇列中,佇列我們都知道是fifo的。singlethreadexecutor的工作執行緒只有乙個,其他佇列中的執行緒都處於休眠,也就是sleep狀態,當這個worker執行緒做完事了,也就是run方法執行結束,就又從佇列中拿出乙個休眠執行緒(sleep)出來喚醒(notify),這樣依次把佇列中的所有執行緒處理完畢,這樣並沒有結束,如果執行緒池中沒有待處理的執行緒,執行緒池一直會等待,等待下一次任務的提交,除非把執行緒池給shutdown掉,這樣執行緒池的生命週期才算完畢。 java多執行緒執行順序
我們建立兩個執行緒,讓奇數執行緒輸出奇數,偶數執行緒執行輸出偶數。先來看看 實現 package test import org.ietf.jgss.oid public class threadnum extends thread public void run system.out.printl...
Java 執行緒的先後執行順序控制
說明 一般在多執行緒程式設計時,需要控制線程的先後執行順序,比如 主線程中寫了子執行緒t1,想要的效果是需要t1先執行,然後再執行接下來的主線程操作,但是預設的是主線程先執行,所以問題就出現了,執行結果與預期結果不一致。下面將介紹thread的join 方法來解決這個問題。方法有兩個執行緒t1和t2...
執行緒的執行順序
執行緒的執行完全是自發的去搶cpu時間片,誰先搶到誰就先去執行 package com.pers.xiancheng public class test implements runnable 裡面的 if thread.currentthread getname equals a thread.c...