1.引子
在java多線程併發編程中,有八大基礎核心。考考你:
看看都有哪八大基礎核心呢?它們分別是:
1.建立線程的方式
2.線程啓動
3.線程中止
4.線程生命週期
5.線程相關的方法
6.線程相關的屬性
7.線程異常處理
8.線程安全java
今天咱們從第六個基礎核心開始:線程相關屬性編程
2.考考你
#前情回顧
在咱們平常多線程編程中,須要關心線程的線程優先級有:
線程Id
線程名稱
是不是守護線程
線程優先級安全
#考考你
1.你知道線程Id的做用嗎?
2.你知道線程名稱的做用嗎?
3.你知道什麼是守護線程嗎?
4.你知道守護線程與用戶線程的區別嗎?
5.你知道有哪些線程優先級嗎?
6.你知道爲何咱們在實際開發中,不該該依賴線程優先級嗎?多線程
3.案例
3.1.線程Id
簡述:併發
1.線程Id,是線程的惟一身份標識編程語言
2.用於JVM執行過程當中,識別線程spa
package com.anan.thread.threadproperty;操作系統
/**
* 線程屬性:Id
* 1.線程Id,是線程的惟一身份標識
* 2.用於JVM執行過程當中,識別線程
*/
public class ThreadIdDemo {線程
public static void main(String[] args) {
// 建立線程對象
Runnable r1 = new MyRunnable();
Thread t1 = new Thread(r1);
t1.start();3d
// 打印主線程main的Id
System.out.println("【主】線程Id:" + Thread.currentThread().getId());
}
}
/**
* 實現Runnable接口,建立線程
*/
class MyRunnable implements Runnable{
public void run() {
System.out.println("【子】線程Id:" + Thread.currentThread().getId());
}
}
彩蛋:
1.咱們知道線程Id是從1依次遞增的
2.那麼主線程main的編號是1,爲何咱們建立的新線程編號不從2開始?
3.2.線程名稱
簡述:
1.線程名稱,能夠在建立線程對象的時候設置(有默認名稱)
2.用於在開發過程當中,方便調試,或者友好閱讀
package com.anan.thread.threadproperty;
import java.util.concurrent.TimeUnit;
/**
* 線程屬性:Id
* 1.線程名稱,能夠在建立線程對象的時候設置(有默認名稱)
* 2.用於在開發過程當中,方便調試,或者友好閱讀
*/
public class ThreadNameDemo {
public static void main(String[] args) throws InterruptedException{
// 建立兩個線程對象
Runnable r1 = new MyRunnable1();
// 使用默認線程名稱
Thread t1 = new Thread(r1);
t1.start();
// 休眠1秒,實現順序打印
TimeUnit.SECONDS.sleep(1);
// 指定線程名稱
Thread t2 = new Thread(r1,"my-thread-2");
t2.start();
}
}
/**
* 實現Runnable接口,建立線程
*/
class MyRunnable1 implements Runnable{
public void run() {
System.out.println("線程名稱:" + Thread.currentThread().getName());
}
}
4.討論分享
#考考你答案
1.你知道線程Id的做用嗎?
1.1.線程Id,是線程的惟一身份標識
1.2.用於JVM執行過程當中,識別線程
2.你知道線程名稱的做用嗎?
2.1.線程名稱,能夠在建立線程對象的時候設置(有默認名稱)
2.2.用於在開發過程當中,方便調試,或者友好閱讀
3.你知道什麼是守護線程嗎?
3.1.守護線程,是在後臺運行的線程
4.你知道守護線程與用戶線程的區別嗎?
4.1.咱們日常開發,建立的都是用戶線程
4.2.守護線程,與用戶線程整體沒有區別
4.3.區別在於:
4.3.1.守護線程,不會影響JVM的退出執行
4.3.2.用戶線程,當JVM退出的時候,須要等待用戶線程執行完成
5.你知道有哪些線程優先級嗎?
5.1.線程優先級,表示獲取CPU執行時間機會的多少,優先級越高,越有機會
5.2.在java編程語言中,總共有10種優先級設置:
最小優先級:1
默認優先級:5
最大優先級:10
6.你知道爲何咱們在實際開發中,不該該依賴線程優先級嗎? 6.1.緣由一: java的線程,是基於操做系統內核線程實現 6.2.緣由二: 不一樣的操做系統,優先級定義不同 6.3.緣由三: 在不一樣的操做系統上,java線程優先級映射到操做系統內核會不同,所以咱們不該該依賴線程的優先級