多執行緒(鞏固練習1)

2021-10-02 12:53:25 字數 3196 閱讀 2040

利用執行緒進行售票處理

思路:利用synchronized(同步)限制進來的執行緒,避免出現售票異常。

盡量不要將synchronized放在run()上,while(true)是為了讓執行緒一直進行迴圈。

class

ticketrunnable

implements

runnable

//應該是return不能終止不到run()內迴圈

}catch

(interruptedexception e)}}

private

synchronized

boolean

sale()

else}}

public

class

memo01

}

結果:
視窗二正在售票,一共已售990,餘票:10

視窗三正在售票,一共已售991,餘票:9

視窗一正在售票,一共已售992,餘票:8

視窗二正在售票,一共已售993,餘票:7

視窗四正在售票,一共已售994,餘票:6

視窗二正在售票,一共已售995,餘票:5

視窗一正在售票,一共已售996,餘票:4

視窗三正在售票,一共已售997,餘票:3

視窗二正在售票,一共已售998,餘票:2

視窗四正在售票,一共已售999,餘票:1

視窗二正在售票,一共已售1000,餘票:0

視窗三的票以買完!

視窗一的票以買完!

視窗二的票以買完!

視窗四的票以買完!

思路及步驟:

先理清子執行緒和主線程的關係,和生產者與消費者相似(我個人認為)。

現將子執行緒和主線程的輸出次數先寫出來 ,集中在乙個類中進行呼叫。

子執行緒:

private

boolean flag =

true

;//true表示主線程輸出完畢,false表示子執行緒輸出完畢

public

synchronized

void

childthread()

throws interruptedexception

for(

int i =

0; i <

10; i++

) flag =

false

;this

.notify()

;}

主線程:
private

boolean flag =

true

;//true表示主線程輸出完畢,false表示子執行緒輸出完畢

public

synchronized

void

mainthread()

throws interruptedexception

for(

int i =

0; i <

100; i++

) flag =

true

;this

.notify()

;//使用notify()和notifyall()沒有區別,試過

}

在各自的run()內進行for迴圈輸出50次。

class

childmessage

implements

runnable

@override

public

synchronized

void

run(

)catch

(interruptedexception e)}}

}//主線程

class

mainmessage

implements

runnable

@override

public

synchronized

void

run(

)catch

(interruptedexception e)}}

}class

message

for(

int i =

0; i <

10; i++

) flag =

false

;this

.notify()

;}public

synchronized

void

mainthread()

throws interruptedexception

for(

int i =

0; i <

100; i++

) flag =

true

;this

.notify()

;}}public

class

circle

}

結果:
主線程--

----執行--

----:97

主線程--

----執行--

----:98

主線程--

----執行--

----:99

子執行緒***

***執行***

***:0子執行緒***

***執行***

***:1子執行緒***

***執行***

***:2子執行緒***

***執行***

***:3子執行緒***

***執行***

***:4子執行緒***

***執行***

***:5子執行緒***

***執行***

***:6子執行緒***

***執行***

***:7子執行緒***

***執行***

***:8子執行緒***

***執行***

***:9主線程--

----執行--

----:0

主線程--

----執行--

----:1

主線程--

----執行--

----:2

主線程--

----執行--

----:3

子執行緒和主線程迴圈輸出參考處:

java多執行緒練習1

5輛汽車過隧道,隧道一次只能通過一輛汽車,每輛汽車通過時間不固定 1 class threaddemo2 227 catch exception e 29 system.out.println 所有車都已經通過隧道了 30 31 3233 使用單個執行緒類實現 34class car extends...

鞏固練習題1

unit1 一.普通使用者登陸 student 普通使用者,密碼student 二.開啟乙個bash 三。修改student的密碼,把密碼更新成 t3st1ngtlme 主機字母和數字 1.若使用者為普通使用者,直接跟passwd,若不是,passwd 使用者名稱,表示修改其他使用者密碼。2.超級使...

多執行緒練習

1 請在指定位置插入 實現列印輸出1 99。package com.company.deno class demo public void method 結束位置 thread t new thread a t.start 2 檢查 並修改 class test implements runnabl...