乙個執行緒物件在它的生命週期內,需要經歷5個狀態
執行狀態(running)
在執行狀態的執行緒執行自己的run方法中的**,直接呼叫其他方法而終止或等待某資源而阻塞或完成任務而死亡。如果在給定的時間片內沒有執行結束,就會被系統給換下來回到就緒狀態。也可能由於某些「導致阻塞的事件」而進入阻塞狀態。
阻塞狀態(blocked)
阻塞指的是暫停乙個執行緒的執行以等待某個條件發生(如某資源就緒)。有4種原因會導致阻塞:
死亡狀態(terminated)
死亡狀態是執行緒生命週期中的最後乙個階段。執行緒死亡的原因有兩個。
終止執行緒的典型方式
終止執行緒我們一般不使用jdk提供的stop()或destroy()方法(它們本身也被jdk廢棄了)。通常的做法是提供乙個boolean型的終止變數,將這個變數置為false時,則終止執行緒的執行。
例子一:終止執行緒的典型方法(重要)
package com.shenqi.stopthread;
public
class
testthreadterminate
implements
runnable
@override
public
void
run()
}public
void
terminate()
public
static
void
main(string args)
//在terminate()方法中將live設定為false,終止執行緒。
threadstate.terminate();
system.out.println("threadstate is stop!");
}}
程式執行結果:
主線程:0
主線程:1
主線程:2
主線程:3
主線程:4
主線程:5
主線程:6
執行緒a0
主線程:7
主線程:8
主線程:9
主線程:10
主線程:11
主線程:12
主線程:13
主線程:14
主線程:15
主線程:16
主線程:17
主線程:18
主線程:19
主線程:20
主線程:21
主線程:22
主線程:23
主線程:24
主線程:25
主線程:26
主線程:27
主線程:28
主線程:29
主線程:30
主線程:31
主線程:32
執行緒a1
主線程:33
執行緒a2
主線程:34
執行緒a3
執行緒a4
主線程:35
執行緒a5
主線程:36
主線程:37
主線程:38
主線程:39
主線程:40
主線程:41
執行緒a6
主線程:42
主線程:43
主線程:44
主線程:45
主線程:46
主線程:47
主線程:48
主線程:49
主線程:50
主線程:51
主線程:52
主線程:53
執行緒a7
主線程:54
執行緒a8
主線程:55
執行緒a9
主線程:56
執行緒a10
主線程:57
執行緒a11
執行緒a12
執行緒a13
執行緒a14
執行緒a15
執行緒a16
執行緒a17
執行緒a18
執行緒a19
執行緒a20
執行緒a21
執行緒a22
執行緒a23
主線程:58
執行緒a24
主線程:59
主線程:60
主線程:61
主線程:62
主線程:63
主線程:64
主線程:65
主線程:66
主線程:67
主線程:68
主線程:69
主線程:70
主線程:71
主線程:72
主線程:73
主線程:74
主線程:75
主線程:76
主線程:77
主線程:78
執行緒a25
主線程:79
執行緒a26
主線程:80
主線程:81
執行緒a27
主線程:82
主線程:83
主線程:84
主線程:85
執行緒a28
主線程:86
執行緒a29
主線程:87
執行緒a30
主線程:88
執行緒a31
主線程:89
執行緒a32
執行緒a33
執行緒a34
主線程:90
執行緒a35
主線程:91
執行緒a36
主線程:92
主線程:93
主線程:94
執行緒a37
主線程:95
執行緒a38
主線程:96
主線程:97
主線程:98
主線程:99
執行緒a39
threadstate is
stop!
暫停執行緒執行sleep/yield
暫停執行緒執行常用的方法有sleep()和yield()方法,這兩個方法的區別是:
例子二:暫停執行緒的典型方法——sleep()
package com.shenqi.sleepthread;
public
class
testthreadsleep
}//使用繼承方法實現多執行緒
class
sleepthreadstate
extends
thread catch (interruptedexception e) }}
}
執行結果如下所示:(注:使用sleep()方法執行時可以感受到每條結果輸出之前的延遲。)
thread-1
:0thread-0
:0thread-1
:1thread-0
:1thread-0
:2thread-1
:2thread-1
:3thread-0
:3thread-1
:4thread-0
:4
例子二:暫停執行緒的典型方法——yield()
package com.shenqi.yieldthread;
public
class
testthreadyield
}//使用繼承方式實現多執行緒
class
statethreadyield
extends
thread
}}
執行結果如下所示:(注:yield()方法可以引起執行緒切換,但執行時沒有明顯延遲。)
thread-0
:0thread-0
:1thread-0
:2thread-0
:3thread-0
:4thread-1
:0thread-1
:1thread-1
:2thread-1
:3thread-1
:4thread-1
:5thread-0
:5thread-1
:6thread-0
:6thread-0
:7thread-1
:7thread-1
:8thread-0
:8thread-0
:9thread-1
:9
java中的多執行緒
package testthread 店員從生產者取貨,消費者從店員取貨,店員最多只能存放20個產品,當產品不夠20個需通知生產者生產,超過20個時停止消費 author passenger 店員類 class clerk catch interruptedexception e else 消費產品...
java中的多執行緒
建立執行緒的第一種方法 繼承thread類。步驟 1,定義乙個類繼承thread 2,複寫thread類中的run方法 目的 將自定義 儲存在run方法中,讓執行緒執行 3,呼叫執行緒的start方法,該方法用兩個作用 啟動執行緒,呼叫run方法 多執行緒的特性 隨機性 示例 class demo ...
java 中 的多執行緒
package wait 執行緒同步涉及的 同步控制 wait 使當前執行緒等待,不在爭搶cpu,並釋放同步 塊 或 同步方法的 鎖 notify 喚醒 某乙個 被 wait 的執行緒 notifyall 喚醒所有 被 wait 的執行緒 public class testwait implemen...