程序:程序是處在執行的程式
執行緒:程序裡任務的執行路徑
多執行緒:乙個程序裡有多個執行緒可以執行多個任務
執行緒安全問題:
先看乙個售票例子
public class main
}class selltickets extends thread
@override
public void run()else
} }}
列印結果:1號視窗賣出了第100號票
3號視窗賣出了第100號票
3號視窗賣出了第98號票
3號視窗賣出了第97號票
3號視窗賣出了第96號票
我們會發現第100號票被賣了2次。
解決方案:給需要的**塊加上同步鎖
synchronized (this) catch (interruptedexception e)
num--;
}else
}
再看列印結果:
3號視窗賣出了第100號票
3號視窗賣出了第99號票
3號視窗賣出了第98號票
2號視窗賣出了第2號票
2號視窗賣出了第1號票
3號視窗賣出了第47號票
票已經售光
1號視窗賣出了第48號票
票已經售光
票已經售光
於是一共賣出了100張票
我們把這個問題叫作執行緒安全問題,那麼為什麼會出現執行緒安全問題呢?
這是因為執行緒搶占資源引起的,當1號視窗執行**塊中的任務時,還沒執行完畢,即票數還未減到99,視窗3就搶占了cpu執行權,也執行**塊裡的任務。此時第100號票相當於被賣了2次。當我們加上安全鎖(synchronized)之後,**塊裡的**在某段時間裡只能有乙個執行緒可以執行。這就解決了執行緒安全問題!
程序 執行緒 多執行緒
程序是系統中正在執行的乙個程式,程式一旦執行就是程序。程序可以看成程式執行的乙個例項。程序是系統資源分配的獨立實體,每個程序都擁有獨立的位址空間。乙個程序無法訪問另乙個程序的變數和資料結構,如果想讓乙個程序訪問另乙個程序的資源,需要使用程序間通訊,比如管道,檔案,套接字等。乙個程序可以擁有多個執行緒...
程序,執行緒,多執行緒,執行緒池
程序是執行緒的容器,乙個程序包含多個執行緒。執行緒的定義是程式的執行路徑。每個執行緒都定義了乙個獨特的控制流,如果應用程式涉及到複雜且耗時的操作,那麼設定不同的執行緒執行路徑會非常有好處,因為每個執行緒會被指定於執行特定的工作。單一執行緒會導致程式只能執行乙個任務,為了使程式能執行多個任務,就要用到...
Java多執行緒 執行緒狀態
from 一.執行緒狀態型別 1.新建狀態 new 新建立了乙個執行緒物件。2.就緒狀態 runnable 執行緒物件建立後,其他執行緒呼叫了該物件的start 方法。該狀態的執行緒位於可執行執行緒池中,變得可執行,等待獲取cpu的使用權。3.執行狀態 running 就緒狀態的執行緒獲取了cpu,...