class mythread2 implements runnable catch (interruptedexception e)
system.out.println(thread.currentthread().getname()+"+賣票,ticket="+this.ticket--);
}else
} }}public class threaddemo1
}
票販子c+賣票,ticket=9
票販子b+賣票,ticket=8
票販子a+賣票,ticket=10
票販子c+賣票,ticket=7
票販子a+賣票,ticket=6
票販子b+賣票,ticket=5
票販子c+賣票,ticket=4
票販子b+賣票,ticket=3
票販子a+賣票,ticket=2
票販子c+賣票,ticket=1
*******票已被搶光*******
票販子b+賣票,ticket=0
*******票已被搶光*******
票販子a+賣票,ticket=-1
*******票已被搶光*******
可以看到票數有為負數的情況。
分析:當只剩最後一張票的時候,a去買票了,首先判斷this.ticket>0成立,然後sleep(100)了,沒有執行ticket–,在a sleep的時候b來了,由於a的操作還沒有執行到ticket–,b判斷this.ticket>0也成立,然後b也sleep了,c同理,asleep時間到了,把票取走了,b和c醒了,沒票了。
為什麼要執行緒同步的例子
設定全域性變數g bcontinue,在主線程中設定全域性變數g bcontinue,工作執行緒檢測該全域性變數,實現主線程控制工作執行緒的目的 列印出的g cnt1與g cnt2的數值不同,是因為執行緒除錯時時間片的切換 counterror.cpp 定義控制台應用程式的入口點。include s...
為什麼要建立執行緒池
在有些工作場景中,比如說伺服器程式設計中,如果為每乙個客戶都分配乙個新的工作執行緒,並且當工作執行緒與客戶通訊結束時,這個執行緒被銷毀,這就需要頻繁的切換工作執行緒,這會帶來一些負擔,最主要的是系統大的開銷和系統資源不足問題。首先,伺服器建立和銷毀工作執行緒的開銷很大,如果伺服器與很多客戶端通訊,並...
Windows為什麼要支援執行緒
windows為什麼要支援執行緒,程序與執行緒的聯絡與區別是什麼?在計算機的早期歲月,作業系統沒有提供執行緒概念。事實上整個系統只執行著乙個執行執行緒,其中同時包含作業系統 和應用程式。只用乙個執行執行緒的問題在於,長時間執行的任務會阻止其他任務執行。例如,在16位windows的那些日子,列印乙個...