馬士兵-多執行緒學習第03課 執行緒的合併,禮讓和優先順序
1.執行緒的合併API
join表示執行緒的合併,簡單理解為呼叫某個方法,變成順序執行程式碼:
package org.yla.msb.day03; class MyThred implements Runnable{ @Override public void run() { for (int i = 0; i < 10; i++) { try { Thread.sleep(1000); //休眠一會,可以更好的看出效果 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+"--->"+i); } } } /** * 測試執行緒的join合併操作 * @author yangluan * 2016年10月30日下午2:29:56 */ public class TestThreadJoin { public static void main(String[] args) { Thread t = new Thread(new MyThred(),"abcde"); //建立執行緒,並且為此執行緒設定一個名字 t.start(); try { t.join(); //執行緒合併 } catch (InterruptedException e) { e.printStackTrace(); } for (int i = 0; i < 10; i++) { System.out.println("main thread ----->"+i); } } }
執行:
執行順序分析:abcde--->0 abcde--->1 abcde--->2 abcde--->3 abcde--->4 abcde--->5 abcde--->6 abcde--->7 abcde--->8 abcde--->9 main thread ----->0 main thread ----->1 main thread ----->2 main thread ----->3 main thread ----->4 main thread ----->5 main thread ----->6 main thread ----->7 main thread ----->8 main thread ----->9
2.執行緒的禮讓API
yield()表示讓出cpu給其他資源或者程式使用,但是隻讓一回 程式碼:
程式碼執行:package org.yla.msb.day03; /** * 執行緒的禮讓 * @author yangluan * 2016年10月30日下午2:41:48 */ public class TestThreadYeild { public static void main(String[] args) { YeildThread y1 = new YeildThread(); YeildThread y2 = new YeildThread(); Thread t1 = new Thread(y1,"執行緒A"); Thread t2 = new Thread(y2,"執行緒B"); t1.start(); t2.start(); } } class YeildThread extends Thread{ @Override public void run() { for (int i = 0; i < 10; i++) { System.out.println(Thread.currentThread().getName()+": "+i); if(i==5){ yield(); //執行緒的禮讓 } } } }
結果表明:到5的時候執行緒會自動禮讓一下
3.執行緒的優先順序API
執行緒一共有10個優先順序分別是數字1到10,數字越大,級別越高,代表執行此程式碼的情況越多,Thread類中定義了3個static的屬性,執行緒的預設優先順序是5 程式碼:
package org.yla.msb.day03;
/**
* 執行緒的優先順序
* @author yangluan
* 2016年10月30日下午2:52:31
*/
public class TestThreadPriority {
public static void main(String[] args) {
ThreadPriority tp1 = new ThreadPriority();
ThreadPriority tp2 = new ThreadPriority();
Thread t1 = new Thread(tp1,"A");
Thread t2 = new Thread(tp2,"B");
t1.setPriority(Thread.NORM_PRIORITY+5); //設定執行緒的優先順序 5+3=8
t1.start();
t2.start();
}
}
class ThreadPriority extends Thread{
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName()+"--->"+i);
}
}
}
執行:A--->0
A--->1
B--->0
A--->2
A--->3
A--->4
B--->1
B--->2
B--->3
B--->4
注意:執行緒的優先級別高,並不代表其他級別低的就不執行,等待高的執行完畢才執行,只是級別高的執行緒可能先執行的完畢的機率大一些
本文地址:http://blog.csdn.net/hblfyla/article/details/52993771
相關推薦
馬士兵-多執行緒學習第03課 執行緒的合併,禮讓和優先順序
1.執行緒的合併API join表示執行緒的合併,簡單理解為呼叫某個方法,變成順序執行 程式碼:package org.yla.msb.day03; class MyThr
多執行緒學習筆記--03執行緒間的通訊(wait/notify)
1.執行緒間的通訊 使用wait/notify來實現執行緒間的通訊 生產者/消費者模式的實現 方法join的使用 ThreadLocal
Java多執行緒學習筆記15之執行緒間通訊
詳細程式碼見:github程式碼地址 本節內容: 1)ThreadLocal類的使用 JDK文件及方法翻譯 InheritableThreadLocal的使用 5.
Java多執行緒學習筆記14之執行緒間通訊
詳細程式碼見:github程式碼地址 本節內容: 1) 實戰 等待/通知之交叉備份 2) 方法join的使用(Jdk文件翻譯及原始碼解析) join()及join(long)的使用和實現原理 &nbs
Java多執行緒學習筆記13之執行緒間通訊
詳細程式碼見:github程式碼地址 本節內容: 1) 生產者消費者模型 多個生產者和多個消費者: 操作值假死及解決 多個生產者和多個消費者: 操作棧假死及解決 2) 通過管
Java多執行緒學習筆記11之執行緒間通訊
本文是我學習Java多執行緒以及高併發知識的第一本書的學習筆記, 書名是<<Java多執行緒程式設計核心技術>>,作者是大佬企業高階專案經理 高洪巖前輩,在此向他致敬。我將配合開發文件以及本書和其他的部落格 奉獻著的文章來學習,同時做一些簡單的總結。有
多執行緒學習筆記六之併發工具類CountDownLatch和CyclicBarrier
目錄 簡介 CountDownLatch 示例 實現分析 CountDownLatch與Thread.join() CyclicBarrier 實現分析 CountDownLatch和CyclicBarrier區別 簡介
C# 多執行緒學習(五)執行緒同步和衝突解決
首先先說一個執行緒不同步的例子吧,以下為售票員的模擬售票,多個售票員出售100張門票,程式碼如下: using System; using System.Text; using System.Collections.Generic; using Syste
多執行緒學習筆記 理解一下 執行緒範圍內資料共享,執行緒外獨立
多執行緒學習筆記 理解一下 執行緒範圍內資料共享,執行緒外獨立 直接看原始碼: import java.util.HashMap; import java.util.Map; import j
多執行緒學習筆記(三)--使用者執行緒和守護執行緒
闡述Java執行緒中有兩種執行緒:①使用者執行緒 ②守護執行緒使用者執行緒:平時用到的普通執行緒均是使用者執行緒守護執行緒:指在程式執行的時候在後臺提供一種通用服務的執行緒,守護執行緒是為使用者執行緒服
多執行緒學習(6)執行緒池 ThreadPool
threadpool模型: 呼叫方通過呼叫api將任務,裝進queue裡,然後會有一個機制監事queue裡有沒有task,
深度學習第三課 多層感知機
多層感知機針對於中間有隱藏層的神經網路結構,對於資料的每一層傳遞都會相應的多一層[w,b],這中間使用的傳參函式稱之為啟用函式,如果啟用函式是線性的話,那麼就沒什麼意義,無論中間有多少層,其實和沒有隱藏層是一樣的,所以需要非線性的函式作為啟用函
執行緒第四課——執行緒常用方法
這節課我們來講講執行緒常用的方法,還是看API文件加寫程式碼演示: 以下是Thread類的常用方法 以下是Object類中和執行緒有關的方法:
python學習第03篇-20181031
今天學習的是python的類與例項的一些知識,還對於python進行了一些小的總結:如下 print("--------類與例項-------") class Student(object): pass class Student2(object): def __
老男孩Python 3.5學習第03周
字串不可以更改,調整大小寫的方法是產生新的字串覆蓋原有字串。 集合內部元素是無序的。 A.intersection(B),求交集。 A.union(B),求並集。 A.difference(B),求差集。 A.issubset(B),判斷是否子集。 A.issuperset(b),判斷是否母集。
馬士兵html javascript css學習總結
HTML: 1>:html不區分大小寫,但推薦用小寫。 2>:<style>…</style>定義CSS格式 <Script language=“”>…</Script> 用於定義指令碼,Eg. Javas
UI學習第03天
最近一週一直很忙了,白天幾乎沒有看iOS的的時間,這第三天的視訊我嫩是用了差不多4天的時間才看完,做完,說實話真的很累,今天是週六朋友叫我出去玩,我也沒去這麼多的學習任務在這兒如果不學好,我真的對不起自己的這麼大得投入。 以下是第03天一些學習體會和筆記: 1、
PostgreSQL學習第十三篇 執行計劃
PostgreSQL中explain的語法: explain [option] statement explain [analyze] [verboase] statement 命令的可選選項option為: analyze verbose costs buffers fo
Struts2學習第三課 Struts2詳解
request end apach -1 sso struts2 input div available 接著上次的課程 這次我們看struts.xml 修改如下:這裏是加上命名空間,默認的是不加,我們手動加上時就要在訪問時加上命名空間。 <?xml version
Struts2學習第三課 訪問Web資源
request logs w3c result ring servle ext 獲取request out 1.什麽是WEB資源? HttpServletRequest,HttpSession,ServletContext等原生的Servlet API。 2.為什麽訪問WE