1. 程式人生 > >馬士兵-多執行緒學習第03課 執行緒的合併,禮讓和優先順序

馬士兵-多執行緒學習第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多執行緒程式設計核心技術>>,作者是大佬企業高階專案經理 高洪巖前輩,在此向他致敬。我將配合開發文件以及本書和其他的部落格 奉獻著的文章來學習,同時做一些簡單的總結。有

執行學習筆記六之併發工具類CountDownLatchCyclicBarrier

目錄 簡介 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