<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
start
方法 啟動執行緒 在start方法中呼叫start0
方法,而start0
是一個本地方法,其底層是C++實現的。
public synchronized void start() { if (threadStatus != 0) throw new IllegalThreadStateException(); group.add(this); boolean started = false; try { start0(); started = true; } finally { try { if (!started) { group.threadStartFailed(this); } } catch (Throwable ignore) { } } } private native void start0();
run
方法 子執行緒的執行體,在其方法體中編寫執行緒邏輯,run
方法和普通成員方法一樣,可以重複呼叫,當我們單獨呼叫run
方法時會在當前執行緒中執行run
方法,並不會啟動新執行緒。
yield方法執行緒讓步暫停當前執行緒的執行,並讓步於其他同優先順序的執行緒,讓其他執行緒先執行
yield方法是Thread類中的靜態方法
public static native void yield();
特點
yield
方法的讓步,能讓正在執行的執行緒由“執行狀態”進入到“就緒狀態”,等待排程執行。yield
僅僅是讓出CPU資源,讓給誰,是有系統決定的,系統會讓其他相同優先順序或者是更高優先順序的執行緒來獲取執行權,要是沒有更高優先順序的執行緒,會繼續執行原來的執行緒。
join
方法 執行緒合併 暫停當前執行緒的執行,等待子執行緒執行完畢再繼續執行當前執行緒,也叫做執行緒插隊,join
方法做的事情就是講並行或並行執行的執行緒合併為序列執行。
程式碼範例:
public class ThreadMethod02 { public static void main(String[] args) throws InterruptedException { T2 t2 = new T2(); t2.start(); //主執行緒列印 int count = 0; for (int i = 1; i <= 10; i++) { Thread.sleep(1000); System.out.println("main" + i); if (++count == 5) { t2.join();//子執行緒插隊 } } } } class T2 extends Thread { @Override public void run() { for (int i = 1; i <= 10; i++) { try { Thread.sleep(1000);//休眠一秒鐘 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("A" + i); } } }
執行結果:
sleep
執行緒休眠,在sleep期間,執行緒執行狀態從執行進入到阻塞狀態,會讓出CPU的執行權,當執行緒被重新喚醒時,會由阻塞狀態進入到就緒狀態,等待CPU的使用權
方法介紹:
sleep
方法主要有兩個,sleep(long millis)
和sleep(long millis, int nanos)
兩個方法功能類似,後一個方法提供更高精度的納秒級控制。sleep
方法是Thread裡提供的靜態方法,當前的方法也是可以丟擲InterruptedException
異常,可以被Interrupt中斷掉。程式碼範例:
Interrupt
中斷執行緒 interrupt
方法呼叫僅僅修改了一箇中斷標誌。 如果當前執行緒是可中斷的狀態(呼叫了sleep、join、wait等方法導致執行緒進入阻塞狀態)在其他執行緒中呼叫interrupt方法,會立即丟擲一個InterruptedException
異常,來停止掉中斷。如果當前處於執行狀態,呼叫interrupt方法,執行緒會繼續執行,直到發生sleep、join、wait等方法的呼叫,才會進入阻塞。
Interrupt
方法在Thread類中,是一個普通方法,可以通過物件來呼叫。
public class ThreadMethod03 { public static void main(String[] args) throws InterruptedException { T3 t3 = new T3(); t3.start(); for (int i = 0; i < 3; i++) { Thread.sleep(1000); System.out.println(Thread.currentThread().getName()); } t3.interrupt();//傳送中斷 } } class T3 extends Thread { @Override public void run() { for (int i = 0; i < 3; i++) { System.out.println("A"); } try { System.out.println("進行休眠"); Thread.sleep(20000); } catch (InterruptedException e) { System.out.println(Thread.currentThread().getName() + "被Interrupted!!!"); } } }
執行結果:
deamon
方法 守護執行緒 Java執行緒有兩種,一種是守護執行緒,一種是使用者執行緒,使用者執行緒一般使用者執行使用者級任務,一般建立的執行緒都是使用者執行緒,守護執行緒也叫做“後臺執行緒”服務於使用者執行緒,一般就是用來執行後臺任務,例如:垃圾回收就是由專門執行緒來處理的,負責垃圾回收的執行緒就是守護執行緒。
守護執行緒存在兩個方法
public final void setDaemon(boolean on)
設定守護執行緒,引數是true和false,true表明設定為守護執行緒, false,設定為非守護執行緒 ,預設是false。
public final boolean isDaemon()
判斷是否守護執行緒,返回Boolean型別
程式碼範例:
public class ThreadMethod04 { public static void main(String[] args) throws InterruptedException { T4 t4 = new T4(); t4.setDaemon(true);//將子執行緒設定為守護執行緒 t4.start(); if (t4.isDaemon()) {//判斷是否是守護執行緒 System.out.println("子執行緒是守護執行緒"); }else { System.out.println("子執行緒不是守護執行緒"); } for (int i = 1;i <= 5;i++) { Thread.sleep(1000); System.out.println(Thread.currentThread().getName() + i); } } } class T4 extends Thread { @Override public void run() { while (true) {//無限迴圈 try { Thread.sleep(1000);// 休眠1s鍾 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()); } } }
執行結果:
主執行緒結束,子執行緒同時結束
Priority
執行緒優先順序,就是用來指導執行緒執行的優先權
方法介紹
public final void setPriority(int newPriority)
:設定執行緒的優先順序public final int getPriority()
:獲取執行緒的優先順序優先順序範圍
設定Java執行緒的優先順序,最小值為1,預設值是5,最大值是10
public final static int MIN_PRIORITY = 1; public final static int NORM_PRIORITY = 5; public final static int MAX_PRIORITY = 10;
方法特點
1. 執行緒的優先順序並不絕對,所控制的是執行的機會,優先順序高的執行緒執行的概率是比較大,而優先順序低的執行緒也並不是沒有機會,只是執行的概率會低一些。
2. 優先順序共10個優先順序,分別為1-10,數值越大,表明優先順序越高,普通的執行緒優先順序是5。
3. 執行緒的優先順序是用來指導JVM層面優先哪個執行緒執行,最終執行順序還是需要作業系統來指定。
4. 注意:程式碼最好不要依賴於優先順序執行緒,有可能會造成問題,Java中給定的優先順序並不一定嚴格按照給定優先順序執行。
程式碼範例:
public class ThreadMethod05 { public static void main(String[] args) { T5 t5 = new T5(); t5.setPriority(10);//設定優先順序為10 int priority = t5.getPriority();//獲取優先順序 System.out.println(priority); } } class T5 extends Thread { @Override public void run() { System.out.println("A"); } }
執行結果:
本篇文章就到這裡了,希望能夠給你帶來幫助,也希望您能夠多多關注it145.com的更多內容!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45