利用執行緒進行售票處理
思路:利用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...