併發程式設計 Thread和Runable 01

2022-01-23 04:56:55 字數 2266 閱讀 2081

1.繼承thread類(不推薦)

**很簡單,就不說了

public

class

threadtest02

public

static

class userthread extends

thread

public

void

run()

}}

2.實現runable介面

public

class

runabletest01

public

static

class userthread implements

runnable

}}

以上執行的結果:

結束。。。

a run方法執行了

run和start的區別?

總結:呼叫start方法方可啟動執行緒,而run方法只是thread的乙個普通方法呼叫,還是在主線程裡執行。

1.資料不共享

新起三個不同的執行緒,對成員變數操作,互不影響

public

class

threadsharetest01

public

static

class userthread extends

thread

system.out.println("count小於0了");}}

}

結果:

a 執行緒過來了,count變為:9a 執行緒過來了,count變為:8a 執行緒過來了,count變為:7a 執行緒過來了,count變為:6a 執行緒過來了,count變為:5a 執行緒過來了,count變為:4a 執行緒過來了,count變為:3a 執行緒過來了,count變為:2a 執行緒過來了,count變為:1a 執行緒過來了,count變為:0count小於0了

b 執行緒過來了,count變為:9b 執行緒過來了,count變為:8b 執行緒過來了,count變為:7b 執行緒過來了,count變為:6b 執行緒過來了,count變為:5b 執行緒過來了,count變為:4b 執行緒過來了,count變為:3b 執行緒過來了,count變為:2b 執行緒過來了,count變為:1b 執行緒過來了,count變為:0count小於0了

c 執行緒過來了,count變為:9c 執行緒過來了,count變為:8c 執行緒過來了,count變為:7c 執行緒過來了,count變為:6c 執行緒過來了,count變為:5c 執行緒過來了,count變為:4c 執行緒過來了,count變為:3c 執行緒過來了,count變為:2c 執行緒過來了,count變為:1c 執行緒過來了,count變為:0count小於0了

2.資料共享

public

class

threadsharetest02

public

static

class userthread extends

thread

}}

結果:有問題了!

a 執行緒過來了,count變為:8

b 執行緒過來了,count變為:8

c 執行緒過來了,count變為:7

e 執行緒過來了,count變為:5

d 執行緒過來了,count變為:5

j 執行緒過來了,count變為:3

g 執行緒過來了,count變為:3

f 執行緒過來了,count變為:2

i 執行緒過來了,count變為:1

h 執行緒過來了,count變為:0

解決辦法?

最簡單的是在run方法加上synchronized,其實還有別的更高效的方法,後面會說到

public

synchronized

void

run()

改善結果:

a 執行緒過來了,count變為:9

b 執行緒過來了,count變為:8

d 執行緒過來了,count變為:7

e 執行緒過來了,count變為:6

c 執行緒過來了,count變為:5

g 執行緒過來了,count變為:4

h 執行緒過來了,count變為:3

i 執行緒過來了,count變為:2

j 執行緒過來了,count變為:1

f 執行緒過來了,count變為:0

ok!

C 併發程式設計 thread

c 11在標準庫中為多執行緒提供元件,使用執行緒需要包含標頭檔案 thread,其命名空間為 std.每個程序至少有乙個執行緒 執行main 函式的執行緒,其餘執行緒有其各自的入口函式 執行緒函式 當執行緒執行完執行緒函式後,執行緒也會退出.如果不傳入執行緒函式 類似這種形式std thread t...

C 併發程式設計之thread

std thread 在 標頭檔案中宣告,因此使用 std thread 時需要包含 標頭檔案。std thread 構造 注意 可被 joinable 的 thread 物件必須在他們銷毀之前被主線程 join 或者將其設定為 detached.示例 include include include...

Java併發程式設計 Thread類的使用 1

專案環境 專案中有乙個1分鐘輪詢的job,每次輪詢會啟動乙個執行緒 thread 但是會出現1分鐘內,這個執行緒的工作不能處理完畢,下乙個輪詢的執行緒就進來了,會造成資料多次處理。這不是我想要的 在這種環境下,考慮到需要使用synchronized 同步鎖 確保資料的的唯一性和準確性。定時處理批任務...