JAVA 多執行緒舉例

2021-07-11 11:12:21 字數 1653 閱讀 6641

同步函式用的是哪乙個鎖呢?

函式需要被物件呼叫。那麼函式都有乙個所屬物件引用。就是this。所以同步函式使用的鎖是this。

下面通過程式進行驗證。

使用兩個執行緒來買票。乙個執行緒在同步**塊中。乙個執行緒在同步函式中。都在執行買票動作。

最後一行不是我們所希望看到的結果,試想同步的兩個原則:

1、必須要有兩個或者兩個以上的執行緒。

2、必須使多個執行緒使用同乙個鎖。

顯然第乙個條件滿足,第二個不滿足。所以修改synchronized(obj)為synchronized(this);結果如下:

如果同步函式被靜態修飾後,使用的鎖是什麼呢?

通過驗證,發現不再是this,因為靜態方法中也不可以定義this。

靜態進記憶體中,記憶體中沒有本類物件,但是一定有該類對應的位元組碼檔案物件。

類名.class 該物件的型別是class

靜態的同步方法,使用的鎖是該方法所在類的位元組碼檔案物件。類名.class

多執行緒的舉例

1.多程序實現簡單列印 include include 程序 include void run void p 字元陣列 sprintf str,執行緒 d啟動 px messageboxa 0,str,多執行緒 0 void main system pause 2.多執行緒實現查詢 include ...

多執行緒的簡單舉例

這裡以視窗賣票為例,一共有10張票 3個視窗,賣的票不能重 不能多。多執行緒的基本實現有好幾種方法,包括繼承thread類,實現runnable介面,使用執行緒池等。實際開發中一般會採用執行緒池,這裡初學演示使用runnable介面。public class ticketrunnable imple...

POSIX多執行緒 非同步程式設計舉例

整半年沒有更新,發幾篇以前的讀書筆記。content 0.序 1.基本的同步版本 2.多程序版本 3.多執行緒版本 4.小結 0.序 本節通過乙個簡單的鬧鐘例項演示非同步程式設計方法。該程式迴圈接受使用者輸入資訊,直到出錯或者輸入完畢。使用者輸入的每行資訊有兩部分 鬧鐘等待的時間 秒 和鬧鐘時間到達...