thread synchronized執行緒同步

2021-10-22 18:55:43 字數 1312 閱讀 2724

@toc

模擬銀行叫號器

public

class

ticketwindowrunner

implements

runnable

trycatch

(interruptedexception e)

system.out.

println

(thread.

currentthread()

+" 的號碼是:"

+(index++))

;}}}

public

class

test

}

理想狀態是按照順序乙個乙個去叫號, 叫到500號結束,但是結果卻是:

hread[thread-2,5,main] 的號碼是:494

thread[thread-0,5,main] 的號碼是:494

thread[thread-1,5,main] 的號碼是:495

thread[thread-0,5,main] 的號碼是:496

thread[thread-1,5,main] 的號碼是:497

thread[thread-2,5,main] 的號碼是:496

thread[thread-1,5,main] 的號碼是:498

thread[thread-0,5,main] 的號碼是:498

thread[thread-2,5,main] 的號碼是:499

thread[thread-1,5,main] 的號碼是:500

thread[thread-0,5,main] 的號碼是:501

thread[thread-2,5,main] 的號碼是:502

501, 502號都出來了,還重複叫號,順序也不正確, 這時候就要用到同步**塊方式, 修改ticketwindowrunnable類

public

class

ticketwindowrunner

implements

runnable

trycatch

(interruptedexception e)

system.out.

println

(thread.

currentthread()

+" 的號碼是:"

+(index++))

;}}}

}

同步方法時候,如果是static修飾的呼叫的是class鎖, 如果不是static修飾的方法,呼叫的是this鎖

Java多執行緒 synchronized同步方法

synchronized同步方法是為了解決 非執行緒安全 的問題,所謂 非執行緒安全 是指多個執行緒對同乙個物件中的變數進行併發訪問時發生,產生 髒讀 的情況。非執行緒安全 問題存在於 例項變數 中,如果是方法內部的私有變數,則不存在 非執行緒安全 問題,也就是 執行緒安全 的了。demo hass...

核心執行緒之間的同步,R3執行緒和核心執行緒的同步

當執行緒1需要等待執行緒2處理一些事情的時候就用到這種執行緒同步機制 1 事件,訊號燈,互斥體都是執行緒之間通訊的方式,事件的通訊能滿足大部分需求。2 休眠函式 large integer sleeptime 定義乙個休眠的時間 sleeptime.quadpart 100 10 100 3 這裡是...

Windows核心程式設計 (五)使用者模式下執行緒同步

1 原子訪問 interlocked系列函式 該系列的函式會保證對乙個值得遞增操作是原子操作,即不會被打斷。2 高速緩衝行 當cpu從記憶體中讀取乙個位元組的時候,它並不是從記憶體中取回乙個位元組,而是取回乙個高速緩衝行。高速緩衝行存在的目的是為了提高效能。一般來說,應用程式會對一組相鄰的位元組進行...