iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 12
0
Software Development

練習java30天系列 第 27

Day28練習java-多執行序

  • 分享至 

  • xImage
  •  

以前的應用程式,在一個行程中只能處理一件事。現在可以在一個行程中包含多個執行序,將程式分割成一些獨立工作來分別執行,並且如果運用得當可以大幅提升效能,但是分配不當也可能比單一執行序來得更沒有效率。

執行序的生命週期:
在java中執行序叫做Thread物件,可區分為五個階段
1.起始(New):因為Thread是物件,所以要new出來做使用。
2.準備(Runnable):生成物件後,需要呼叫start(),來告訴CPU已經就緒了。
3.執行(Running):得到CPU的認可,便能執行程式。
4.阻塞(Blocked):因為某種原因停止執行,通常會有三種情況:
(1).封鎖(Blocked):呼叫sleep()讓出使用權,進入睡眠狀態,使用這個方法時需要傳入休眠的時間等到時間到,便會從sleeping狀態轉回Runnable狀態。
(2).等待(Wait pool):呼叫wait()讓出使用權,進入等待狀態,可以使用notify()、notifyAll(),將等待中的執行序移動到Lock pool等候。
(3).鎖定池(Lock pool):是指當執行序進入同步(synchronized)程式區塊,會競爭物件鎖(lock),只有取得lock的執行序,才會回到Runnable狀態等待執行。
5.死亡(Dead):一旦執行完run(),便會進入到Dead狀態,一旦進入後便無法再被啟動,倘若想要再度啟動,只能重新建立物件。

以下是實作使用的是繼承Thread的方式:
https://ithelp.ithome.com.tw/upload/images/20201013/20130684YfU82H7KNy.png
https://ithelp.ithome.com.tw/upload/images/20201013/20130684RntqklIyIT.png
每次執行都會有兩種不同的結果,這是用來模擬兩匹馬在賽跑的情形
https://ithelp.ithome.com.tw/upload/images/20201013/20130684tshEC2R99i.png
A先跑到25
https://ithelp.ithome.com.tw/upload/images/20201013/20130684iKUyN6tnW1.png
B先跑到25


上一篇
Day27練習java-集合
下一篇
Day29練習java-多執行序
系列文
練習java30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言