Java指定執行緒的執行順序(亮點在最後)

2021-09-10 04:47:51 字數 2321 閱讀 2765

/**

* 指定執行緒執行順序:通過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...