(1)join():「等你執行結束,我再執行」
(2)singlethreadpool:只有乙個執行緒的執行緒池,任務乖乖在佇列中等待被執行
(3)wait/notify機制:「兄弟們,醒醒,到你了」
(4)reentrantlock 的 condition 的 await/signal機制:「那個兄弟,醒醒,到你了」
接下來就這四種方式進行詳細說明
1、簡介:join(),等待執行緒結束,才能繼執行。
2、本質:讓執行緒wait在當前執行緒物件例項上,觀察join的原始碼:
public final void join() throws interruptedexception
public final synchronized void join(long millis)
throws interruptedexception
//---------重點-------------
if (millis == 0)
//--------------------------
} else
wait(delay);
now = system.currenttimemillis() - base;}}
}
解讀:阻塞當前執行緒,直到目標執行緒執行結束,如果引數是0,意味著無限等待。
3、join實現執行緒順序執行
(1)方式1:在run()中呼叫join方法。
public class m1 catch (interruptedexception e)
system.out.println("b");});
thread t3 = new thread(() -> catch (interruptedexception e)
system.out.println("c");});
t1.start();
t3.start();
t2.start();
//輸出:a b c
}}
(2)方式2:在主方法中呼叫join
public class m2
}
1、簡介:只有乙個執行緒的執行緒池,任務都在等待佇列中排隊,所以它們是乙個乙個執行的
2、兩種建立方式:
executorservice single=new threadpoolexecutor(1,1,0, timeunit.seconds,new linkedblockingdeque<>());
executorservice single = executors.newsinglethreadexecutor();
3、單執行緒執行緒池實現順序執行
public class m2
}
1、簡介:有多種實現方式,這裡介紹通過乙個變數的取值來控制線程執行順序。
注意:wait/notify 要求獲得物件的monitor,所以只能在同步方法或同步**塊中使用
2、wait/notify實現執行緒順序執行
class mythread catch (interruptedexception e)
}system.out.println(str);
if (order<2)
flag++;
else
flag=1;
this.notifyall(); //喚起其他執行緒
}}
public class m3
});thread t9 = new thread(new runnable()
});thread t10 = new thread(new runnable()
});t8.start();
t9.start();
t10.start();
//執行結果:a c b
}}
1、簡介:這個機制和wait/notify很像,(筆者狹隘地認為,condition一定情況下可以更加精確~)
3、await/signal實現執行緒順序執行
public class m5
system.out.println("a");
printb=true;
printa=false;
condition2.signal(); //喚醒在condition2上等待的執行緒
}catch (exception e)finally
});thread t12=new thread(() ->
system.out.println("b");
printa=true;
printb=false;
condition1.signal();
}catch (exception e)finally
});t11.start();
t12.start();
}}
如何讓執行緒按順序執行
join waits for this thread to die.等待此執行緒結束 join long millis waits at most milliseconds for this thread to die.a timeout of 0 means to wait forever.設定加...
如何讓多執行緒按順序執行
上面我們是在子執行緒中指定join 方法,我們還可以在主線程中通過join 方法讓主線程阻塞等待以達到指定順序執行的目的 package printabc.method1 第一種方法,使用object的wait和notifyall方法 public class testprint else try ...
按順序執行執行緒
condition介面提供了類似object的監視器方法,與lock配合可以實現等待 通知模式。condition定義了等待 通知兩種型別的方法,當前執行緒呼叫這些方法時,需要提前獲取到condition物件關聯的鎖。condition物件是由lock物件 呼叫lock物件的newcondition...