黑馬程式設計師Java培訓和Android培訓:多執行緒
Thread.currentThread().getName()
同步程式碼塊
同步函式
程式碼塊和函式的同步
函式是通過this來做標誌位的選擇
死鎖
執行緒間的通訊的問題。
wait()
notify()
notify All
怎麼樣控制其生命週期
實現多執行緒的2種方式:1.從Thread類繼承 2.實現Runnable的介面
一般推薦使用第二種方法
static Thread currentThread()方法 可以獲取當前正在執行的執行緒
getName( ) 得到執行緒的名字 這個方法是從Thread類中繼承而來
要新建立一個執行緒,必須建立Thread的一個派生類,派生類中重寫 run的方法,執行緒的程式碼放在run方法中
新建立了一個執行緒的例項 要想啟動這個執行緒 必須用start()方法 啟動了start方法 JVM會自動run方法
SetDaemon(true/false)設定後臺執行緒 而且必須在Start()之前就必須呼叫
static void yield() 可以讓一個執行緒暫停,讓其他執行緒執行
getPriority() 得到執行緒的優先順序
setPriority(引數) 設定執行緒的優先順序 引數可為: static int MAX_PRIORITY 用表示10
static int MIN_PRIORITY 用表示 1
static int NORM_PRIORITY 用5表示
一個內部類來繼承Thread方法
package Test;
public class machine
{
public static void main(String [] args)
{
MyThread pa=new MyThread();
pa.getInner().start();
System.out.println("thr Thread name is:"+Thread.currentThread().getName());
}
}
class MyThread
{
private class InnerThread extends Thread
{
public void run()
{
System.out.println(Thread.currentThread().getName());
}
}
Thread getInner()
{
return new InnerThread();
}
}
用實現Runnable的方法如下
package Test;
public class machine
{
public static void main(String [] args)
{
MyThread pa=new MyThread();
new Thread(pa).start();
System.out.println("the Thread name is:"+Thread.currentThread().getName());
}
}
class MyThread implements Runnable
{
public void run()
{
System.out.println("the thread name is "+Thread.currentThread().getName());
}
}
同步的兩種方式:1同步塊 2 同步方法
每一個物件都監視器 或者叫鎖 同步塊的實現模式
同步的方法是利用this所代表物件的鎖 同步方法的實現模式
每個class也有一個鎖,是這個class物件的Class物件的鎖 抽象的類的同步實現
練習 火車票售票系統
package Test;
public class machine
{
public static void main(String [] args)
{
sellThread p= new sellThread();
new Thread(p).start();
new Thread(p).start();
new Thread(p).start();
new Thread(p).start();
new Thread(p).start();
new Thread(p).start();
new Thread(p).start();
new Thread(p).start();
}
}
class sellThread implements Runnable
{ int ticket=100;
Object obj= new Object();
public void run()
{
while(true)
{
synchronized(obj)
{
if(ticket>0)
{
System.out.println(Thread.currentThread().getName()+"sell the "+ticket);
ticket--;
}
}
}
}
}
解決死鎖問題用到的函式
wait( ) notify() notifyAll() 這個3個方法是Object中的方法 不是Thread中的方法 ,而且只能在同步方法或者同步塊中呼叫
這三個函式主要用於producer-consumer關係
執行緒的終止: 設定flag變數 結合 interrupt()方法
相關文章
- 黑馬程式設計師Java培訓和Android培訓:培訓前奏程式設計師JavaAndroid
- 黑馬程式設計師Java培訓和Android培訓:列舉程式設計師JavaAndroid
- 黑馬程式設計師Java培訓和Android培訓:I/O程式設計師JavaAndroid
- 黑馬程式設計師Java培訓和Android培訓_IO(二)程式設計師JavaAndroid
- 黑馬程式設計師Java培訓和Android培訓:程式設計基礎程式設計師JavaAndroid
- 黑馬程式設計師Java培訓和Android培訓:物件導向程式設計師JavaAndroid物件
- 黑馬程式設計師Java培訓和Android培訓:內部類程式設計師JavaAndroid
- 黑馬程式設計師Java培訓和Android培訓Java技術二程式設計師JavaAndroid
- 黑馬程式設計師Java培訓和Android培訓_java高新技術(一)程式設計師JavaAndroid
- 黑馬程式設計師Java培訓和Android培訓Java GUI圖形使用者介面程式設計師JavaAndroidGUI
- 好程式設計師Java培訓分享Java多執行緒程式設計師Java執行緒
- 好程式設計師Java培訓分享Java多執行緒併發程式設計師Java執行緒
- 好程式設計師Java培訓分享Java多執行緒常見面試問題程式設計師Java執行緒面試
- Java程式設計師技術培訓需要培訓哪些?Java程式設計師
- 好程式設計師Java培訓分享四種常用執行緒池介紹程式設計師Java執行緒
- 好程式設計師Java培訓告訴你Java-執行緒怎麼來的?程式設計師Java執行緒
- 好程式設計師Python培訓分享Python中程式和執行緒詳解程式設計師Python執行緒
- 好程式設計師Java培訓分享Java程式設計技巧程式設計師Java
- 長沙Java培訓:自學Java程式設計有必要報培訓班麼?Java程式設計
- 好程式設計師Java培訓Java程式設計師必學技術程式設計師Java
- 好程式設計師Java培訓分享Java程式設計師技能提升指南程式設計師Java
- 好程式設計師Java培訓分享Java和HTML的區別?程式設計師JavaHTML
- 好程式設計師Java培訓Java容器類List和Set分析程式設計師Java
- 程式設計師自學/自我培訓指南程式設計師
- 好程式設計師Java培訓分享maven-概述程式設計師JavaMaven
- Java程式設計師培訓班哪家比較好Java程式設計師
- 好程式設計師Java培訓分享int和Integer的區別程式設計師Java
- 好程式設計師Java培訓分享treeset和hashset的區別程式設計師Java
- 好程式設計師Java培訓分享如何快速入門Java程式設計程式設計師Java
- 好程式設計師Java培訓分享Java之反射技術程式設計師Java反射
- 好程式設計師Java培訓分享Java初學者必讀程式設計師Java
- 好程式設計師Java培訓分享Java包是什麼?程式設計師Java
- 好程式設計師Java培訓分享如何快速入門Java程式設計師Java
- 好程式設計師Java培訓分享BigDecimal的用法程式設計師JavaDecimal
- 好程式設計師Java培訓分享SpringBoot -YAML程式設計師JavaSpring BootYAML
- 好程式設計師Java培訓分享For迴圈詳解程式設計師Java
- 好程式設計師Java培訓分享Mybatis面試題集合程式設計師JavaMyBatis面試題
- 好程式設計師Java培訓分享Java程式設計師常用的工具類庫程式設計師Java