1. 程式人生 > >java-初識多線程

java-初識多線程

void package bsp ide 運行 改變 str err over

概要:

一:線程狀態

(1)新生狀態-》創建線程對象然後實現start()方法
(2)就緒狀態
(3)運行狀態-》cpu調度
(4)阻塞狀態
(5)死亡狀態

二:停止線程

1.自然終止:線程體正常運行完畢
2.外部幹涉:
1)線程類中定義線程體的標識
2)線程體使用該標識
3)提供對外的方法改變該標識
4)外部根據條件調用該方法即可

三:阻塞

1.join:合並線程,Y.join(),則先執行Y對象裏面的線程體
2.Thread.yield():暫停線程,當前的方法體
3.Thread.sleep():睡眠,模擬延時,但有可能出現數據異常,資源沖突

四:線程基本信息

isAlive():判斷線程是否活著,是否未終止
getPriority():獲取線程的優先級數據,優先級代表的是概率,並非絕對的先後順序


setPriority():設置線程的優先級
setName():給線程取名字
getName():獲取線程名字
currentThread():獲取當前正在運行的線程對象,也就是取得自己本身

五:線程同步(線程並發)

synchronized->同步
(1)同步塊:
synchronized(引用類型 || this || 類.class){}
(2)同步方法:
synchronized 方法名(){}

多個線程訪問同一份資源,確保資源安全->線程安全
線程安全則效率低,反之

上代碼了解一下:

(簡單利用靜態代理模式)

1.具體角色:

 1 package
com.test; 2 /*使用Runnable創建線程 3 * 1.使用靜態代理模式實現啟動多線程 4 * (1)創建真實角色 5 * (2)創建代理角色 6 */ 7 public class Singer implements Runnable { 8 9 @Override 10 public void run() { 11 System.out.println("歌手線程執行->歌手曹操準備上臺唱歌。。"); 12 } 13 }

2.代理角色:保持對具體角色的引用

 1 package
com.test; 2 3 public class Agent implements Runnable{ 4 Singer singer=new Singer(); 5 Thread t1=new Thread(singer); 6 public Agent(Singer singer) { 7 super(); 8 this.singer = singer; 9 } 10 private void before() { 11 System.out.println("代理員線程執行->代理員已經準備好臺前工作,歌手就緒!"); 12 } 13 private void after() { 14 System.out.println("代理員線程執行->代理員已經收拾完場地,護送歌手離開!"); 15 } 16 17 @Override 18 public void run() { 19 System.out.println("歌手線程未啟動:"+t1.isAlive()); 20 before(); 21 t1.start(); 22 t1.setName("歌手線程"); 23 System.out.println("當前線程為:"+t1.currentThread()); 24 System.out.println("當前線程名稱:"+t1.getName()); 25 System.out.println("歌手線程啟動:"+t1.isAlive()); 26 //這裏存在多線程運行的延時,即代理員的線程可能運行在歌手的線程前面 27 after(); 28 } 29 }

3.場景模擬:

 1 package com.test;
 2 /*
 3  * 場景模擬:實現多線程的啟動
 4  */
 5 public class Client {
 6 
 7     public static void main(String[] args) throws InterruptedException {
 8         //具體角色
 9         Singer singer=new Singer();
10         //代理角色
11         Agent ag=new Agent(singer);
12         Thread p2=new Thread(ag);
13         //啟動線程
14         p2.start();
15     }
16 }

效果截圖:

技術分享圖片

ps:文章僅作學習了解,如有不對之處歡迎大佬指正。

java-初識多線程