方法詳解
start() 和 run() 方法
setname() 和 getname()
setpriority() 和 getpriority()
setdaemon()
yield() 和 join()
interrupt()
執行緒常用方法 方法
功能start()
啟動執行緒並執行相應的run()方法
run()
執行緒要執行的**放入run()方法
getname()
獲取此執行緒的名字
setname()
設定此執行緒的名字
getid()
獲取執行緒id
getpriority()
獲取執行緒優先順序
setpriority()
執行緒優先順序和執行緒排程器
setdaemon()
設定當前執行緒為守護執行緒。
currentthread()
靜態的,調取當前的執行緒
yield()
釋放自己擁有的cpu
join()
使得放棄當前執行緒的執行,並返回對應的執行緒。
interrupt()
中斷執行緒
start是啟動乙個執行緒
run被當做乙個普通的方法呼叫
class thread3 implements runnable
}public class demo1
}
執行結果
執行緒名:main
執行緒id:1
執行緒優先順序:5
執行緒名:thread-0
執行緒id:8
執行緒優先順序:5
上圖中呼叫start 方法啟動thread這個執行緒,start 呼叫自身run方法,所以顯示為 執行緒名:thread-0
呼叫run方法相當於在主線程中呼叫thread的run方法,當前執行緒顯示為 執行緒名:main
setname():設定執行緒的名字
getname() :獲取執行緒的名字
public static void main(string args)
執行結果:
執行緒名:執行緒1
執行緒id:8
執行緒優先順序:5
還是剛才的**,getname()獲取到的名字就是執行緒1 了。
getpriority() :獲取執行緒的優先順序
setpriority() :設定執行緒的優先順序
public static void main(string args)
}
執行結果:
執行緒名:thread-0
執行緒id:8
執行緒優先順序:1
執行緒優先順序 : 優先順序越高,被優先呼叫的概率越高。(預設為 5 )
1 - 10
在jvm 層是優先執行的,但是在作業系統層是由作業系統自己決定的。
jvm :優先順序越高會優先執行。
作業系統:執行緒優先順序越高,優先執行的概率越高。
所以說優先順序高並不代表一定會執行,只是說明執行的概率比較大。
設定當前執行緒為守護執行緒
守護執行緒:守護執行緒是脫離於中斷的執行緒。
守護執行緒存活,當存在守護執行緒和使用者執行緒時,jvm 存活
當只有守護執行緒時,jvm 就不在了。
通俗來講守護執行緒就是在後台執行的執行緒,使用者一般感知不到它的存在,jvm 中的gc收集器就是守護執行緒。
yield():釋放當前cpu
yield()是讓當前正在執行的程式回到可執行狀態,使得與當前執行緒相同優先順序的執行緒獲得執行的機會。因此,使用yield()方法的目的是讓相同優先順序的執行緒之間能適當的輪換執行。
但是,實際中當前執行緒釋放cpu後也可能再次通過執行緒排程策略再次獲得cpu使用權,不一定能達到目的。
class thread2 implements runnable }
}public class demo3
執行結果:
執行緒1: 0
t2: 0
t2: 1
t2: 2
t2: 3
t2: 4
t2: 5
執行緒1: 1
執行緒1: 2
t2: 6
執行緒1: 3
t2: 7
執行緒1: 4
t2: 8
執行緒1: 5
t2: 9
執行緒1: 6
執行緒1: 7
執行緒1: 8
執行緒1: 9
join():加入執行緒
當前執行執行緒是a 執行緒,呼叫join方法的是b 執行緒
先暫停a 執行緒,執行b 執行緒,b 執行緒執行完成之後再呼叫a 執行緒。
public class demo3 catch (interruptedexception e)
}} }
執行結果:
執行緒1:1
main:2
main:3
執行緒1:2
main:4
執行緒1:3
main:5
執行緒1:4
執行緒1:5
執行緒1:6
執行緒1:7
執行緒1:8
執行緒1:9
main:6
main:7
main:8
main:9
從執行結果可以看出當主線程中 i = 5 時,主線程停止執行,等到執行緒1執行完主線程繼續執行。
中斷執行緒操作實質上是修改了一下中斷標識位;
當前執行緒正在執行,僅僅修改標識位不做其他的;
當前執行緒正在阻塞,修改標識位,如果是join、sleep、yield,則會丟擲interruptedexception,修改標識位false.
關於interrupt() 方法,可以參考這篇部落格,寫的非常好:interrupt()詳解
Java執行緒中常用的方法
當執行緒呼叫yield方法後,執行緒即從執行狀態變為可執行狀態,將cpu的執行權讓給同級別的執行緒 讓出cpu執行權之後,又同別的執行緒共同爭奪cpu的執行權。可能釋放了cpu執行權之後 又搶到了 同時多執行緒之前是搶占cpu的,所以從執行結果上很難看出是否yield方法起了作用 public cl...
Java開發基礎 執行緒 執行緒常用的方法 04
守護執行緒簡要說明 當乙個程序中的所有的前台執行緒都結束時,程序結束,無論後台執行緒 守護執行緒 是否還在執行都要強制中斷.前程執行緒都結束才會結束的執行緒 守護執行緒 下面通過簡單例項演示 public class threaddemo9 catch interruptedexception e ...
Java多執行緒常用方法解析
sleep sleep 方法需要指定等待的時間,它可以讓當前正在執行的執行緒在指定的時間內暫停執行,進入阻塞狀態,該方法既可以讓其他同優先順序或者高優先順序的執行緒得到執行的機會,也可以讓低優先順序的執行緒得到執行機會。但是sleep 方法不會釋放 鎖標誌 也就是說如果有synchronized同步...