關(guān)鍵字volatile的主要作用是使變量在多個線程間可見勋眯。
關(guān)鍵字volatile與死循環(huán)
如果不是在多繼承的情況下,使用繼承Thread類和實現(xiàn)Runable接口在取得程序運行的結(jié)果上并沒有什么太大的區(qū)別额获。如果一旦出現(xiàn)“多繼承”的情況装畅,則用實現(xiàn)Runable接口的方式來處理多線程的問題就是很有必要的。
本節(jié)將用實現(xiàn)Runable接口的方式來繼續(xù)理解多線程技術(shù)的使用嗽元,并且使用關(guān)鍵字volatile來實驗在并發(fā)情況下的一些特性敛纲。此案例也同樣適用于繼承自Thread類
/**
* @author wuyoushan
* @date 2017/5/3.
*/
public class PrintString {
private boolean isContinuePrint=true;
public boolean isContinuePrint() {
return isContinuePrint;
}
public void setContinuePrint(boolean continuePrint) {
isContinuePrint = continuePrint;
}
public void printStringMethod(){
try {
while (isContinuePrint == true) {
System.out.println("run printStringMethod threadName=" +
Thread.currentThread().getName());
Thread.sleep(1000);
}
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
/**
* @author wuyoushan
* @date 2017/3/20.
*/
public class Run {
public static void main(String[] args){
PrintString printStringService=new PrintString();
printStringService.printStringMethod();
System.out.println("我要停止它!stopThread="+Thread.currentThread().getName());
printStringService.setContinuePrint(false);
}
}
程序開始運行后剂癌,根本停不下來淤翔。結(jié)果如下:
run printStringMethod threadName=main
run printStringMethod threadName=main
run printStringMethod threadName=main
run printStringMethod threadName=main
停不下來的原因主要是main線程一直在處理while()循環(huán),導(dǎo)致程序不能繼續(xù)執(zhí)行后面的代碼佩谷,解決的辦法當然就是多線程旁壮。
摘選自 java多線程核心編程技術(shù)-2.3