以前的應用程式,在一個行程中只能處理一件事。現在可以在一個行程中包含多個執行序,將程式分割成一些獨立工作來分別執行,並且如果運用得當可以大幅提升效能,但是分配不當也可能比單一執行序來得更沒有效率。
執行序的生命週期:
在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的方式:
每次執行都會有兩種不同的結果,這是用來模擬兩匹馬在賽跑的情形
A先跑到25
B先跑到25