多线程(二)线程控制
一.線程的操作
構造方法:Thread(Runnable target) 創建新的線程對象
? Thread(Runnable target,String name) 創建新的線程對象,并指定名字
成員方法: ?static Thread currentThread() 返回當前線程對象
? long getId() 返回當前線程ID
String getName() 返回當前線程名稱
void setName() 設置當前線程名稱
boolean isAlive() 判斷當前線程是否處于活動狀態
?
重要方法:
1.sleep 線程休眠
如果需要讓當前正在執行的線程暫停一段時間,并進入阻塞狀態,可以調用Thread類的靜態方法sleep()來實現,sleep()有2種重載形式
static void sleep(long millis) 讓當前線程暫停指定的毫秒數,在繼續執行,比較常用
static void sleep(long millis,int nanos) 讓當前線程暫停指定毫秒數加納秒數,在繼續執行
* 讓當前線程進入休眠狀態,讓出當次執行的CPU時間,當時該線程不丟失任何監視器的所屬權
2.join 等待線程終止
join()方法的作用是讓一個線程等待另一個線程執行完成,它有3種重載形式
join() 等待該線程終止
join(long millis) 等待該線程終止的時間最長為指定毫秒數
join(long millis,int nanos) 等待該線程終止的時間最長為指定毫秒數加納秒數,不常用
3.interrupt() 線程中斷
interrupt()方法只是給線程做了一個中斷標記,并沒有真正地中斷線程,遇到sleep(),join(),wait()方法標記會被清掉,并拋出InterruptException異常,線程會繼續執行
interrupt() 中斷該線程
Thread.interrupted() 判斷當前線程是否被終止
* 但通常會使用自定義標記來中斷線程,滿足條件后自己終止
4.改變線程優先級
每個線程執行都有一定的優先級,優先級高的線程獲得較多的執行機會,優先級低的獲得較少的執行機會。
setPriority(int n) ?設置優先級,n的范圍為1-10之間,一般使用Thread類的3個靜態常量,提高可移植性:
MAX_PRIORITY:值為10
MIN_PRIORITY:值為1
NORM_PRIORITY:值為5
getPriority() ?獲得線程優先級
5.守護線程
守護線程是在后臺運行的,是為其他線程提供服務的,當所有用戶線程都死亡,守護線程會自動死亡,當虛擬機只剩下守護線程時,虛擬機會自動退出,JVM的垃圾回收線程就是典型的守護線程。
setDaemon(boolean on) 將線程標記為守護線程或用戶線程
isDaemon() 判斷線程是否為守護線程
3. yield() 線程讓步
Thread類的靜態方法,和sleep()方法有點相似,只是它讓當前線程暫停,但不會阻塞該線程,只是讓該線程轉入就緒狀態,繼續搶時間執行。暫停之后,只有優先級與該線程相同或優先級比該線程更高的處于就緒狀態的線程才會獲得執行的機會。
?
轉載于:https://www.cnblogs.com/gdpdroid/p/4125483.html
總結
以上是生活随笔為你收集整理的多线程(二)线程控制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaWeb学习之Path总结、Ser
- 下一篇: EJB(四)JPA 分布式事务处理