关于线程控制
最近在寫一個(gè)聊天室程序,最近才開始用java,還是有點(diǎn)生疏。
線程,亮點(diǎn)是線程的異步性,難點(diǎn)是線程的同步,理解并且控制好線程,對(duì)線程的學(xué)習(xí)和應(yīng)用至關(guān)重要!
問題:
寫一個(gè)線程,讓他一直運(yùn)行在主程序運(yùn)行期間,如何安全有效的關(guān)閉線程?
常用做法:
while(flag)
{
XXX//do something....
}
void close(){
this.flag=false;
}
通過這種主動(dòng)標(biāo)志,有時(shí)候可以讓線程停止。但是如果,在XXX處出現(xiàn)讓線程阻塞的情況,顯然close()方法無法關(guān)閉線程,而且會(huì)造成線程的阻塞。
比如,XXX可能是,A=B.accept();//假如B沒有accept到A,那么線程就會(huì)阻塞在這個(gè)地方.
解決方案:
void close(){
this.flag=false;
new A(XXX);//此處應(yīng)是任何可以使線程運(yùn)行下去的方法,保證線程運(yùn)行到while-loop對(duì)flag的判斷
}
當(dāng)然在實(shí)現(xiàn)程序中,要比這復(fù)雜,但是基本思路是這樣,歡迎批評(píng)指正!
?
轉(zhuǎn)載于:https://www.cnblogs.com/lknny/p/4772288.html
總結(jié)
- 上一篇: pat1038. Recover the
- 下一篇: 【读书笔记】iOS-NSString的l