java程序 執行緒 多執行緒以及執行緒安全問題

2021-07-15 08:54:44 字數 939 閱讀 4337

程序:程序是處在執行的程式

執行緒:程序裡任務的執行路徑

多執行緒:乙個程序裡有多個執行緒可以執行多個任務

執行緒安全問題:

先看乙個售票例子

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,...