java第七章多线程_第七章 多线程
7 多線程
7.1 進程和線程
1、進程進程是一個正在執行中的程序
每一個進程都有一個執行順序,該順序是一個執行路徑,或者叫做一個控制單元
2、線程線程就是進程中的一個獨立控制單元
線程在控制著進程的執行
一個進程中至少有一線程
7.2 創建線程的方式
第一種:繼承Thread類
步驟:
定義類繼承Thread
復寫Thread類中的run方法
調用線程的start方法,該方法的作用:啟動線程,并調用run方法。
class Demo extends Thread{
public void run(){
System.out.println("demo run");
}
}
class ThreadDemo{
public static void main(String[] args){
Demo d = new Demo();//創建線程
d.start();
}
}
多線程的特點:隨機性
多線程運行時,每一次運行的結果都不同。每個線程都在爭奪CPU的執行權,誰得到誰就運行。在某一時刻,只能有一個程序運行(多核除外)。CPU在做著快速的切換,以達到同時運行的效果。
run方法用于存儲線程要運行的代碼
static Thread currentThread():獲取當前線程對象
getName():獲取線程名稱
setName或者構造函數:設置線程名稱
第二種:實現Runnable接口
步驟:
定義類實現Runnable接口
覆蓋Runnable接口中的run方法
通過Thread類建立線程對象
將Runnable接口的子類對象作為實際參數傳遞給Thread類的構造函數
調用Thread類的start方法開啟線程,并調用Runnable接口子類額run方法
實現方式和繼承方式的區別繼承Thread:線程代碼存放在Thread子類run方法中
實現Runnable:線程代碼存放在接口的子類額run方法中
實現方法的好處:避免了單繼承額局限性,在定義線程時,建議使用實現方式
class PrimeRun implements Runnable{
public void run(){
System.out.println("demo run");
}
}
class ThreadDemo{
public static void main(String[] args){
PrimeRun p = new PrimeRun();//創建線程
new Thread(p).start();
}
}
7.3 同步
1、同步的前提必須要有兩個或者兩個以上的線程
必須是多個線程使用同一個鎖
必須保證同步中只有一個線程在運行
2、同步的好處和弊端
好處:解決了多線程額安全問題
弊端:多個線程都需要判斷鎖,比較消耗資源。
3、同步代碼塊
synchronized(對象){
需要被同步的代碼
}
對象如同鎖,持有鎖的線程可以在同步中執行。沒有持有鎖的線程即使獲取了CPU的執行權也進不去,因為沒有獲取鎖。
4、同步函數
將synchronized作為函數的修飾符
public synchronized void add(){}
同步函數用的鎖:
函數需要被對象調用,那么函數都有一個所屬對象引用,就是this,所以同步函數使用的鎖是this。
如果同步函數被靜態修飾后,使用的鎖是Class對象,類名.class。
死鎖:同步嵌套
5、新特性:
jdk1.5之后提供了多線程升級解決方案將Synchronized替換成實現Lock操作,加鎖:lock(),解鎖:unlock()
將Object中的wait、notify、notifyall替換成了Condition對象,該對象可通過Lock獲取。等待:await(0,喚醒:signal()。
7.4 停止線程
stop方法已經過時。
只有一種方法停止線程:run方法結束。一般都將代碼放在循環體中,所以只需要加個標記,控制循環,就可以讓run方法結束。
特殊情況:
當線程處于等待狀態,就讀取不到標記,那么就不會結束。這是就需要使用Interrupt()方法,讓等待狀態 線程回到活動狀態。
7.5 Join和yield
1、Join方法臨時加入線程
加入線程時,當前線程會進入等待狀態,直到加入的線程運行完畢,再回到活動狀態。
2、yield方法
暫停當前正在執行的線程,并執行其他線程。
7.6 優先級
優先級有1到10,所有線程默認都是5。通常只取1、5和10,為了便于閱讀將這三個設為了常量,分別對應MIN_PRIORITY、NORM_PRIORITY、MAX_PRIORITY
總結
以上是生活随笔為你收集整理的java第七章多线程_第七章 多线程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java如何理解继承性_理解 Java
- 下一篇: java定时器结合springboot_