java多線程的深入分析
1.進程與線程的區別
1.1 進程通常是指一個應用程序,進程的啟動就意味著該改程序的主線程啟動,不同的進程擁有這不同的內存空間,而不同的線程有共享的內存空間,一個進程包含多個線程
2.java中如何創建線程
2.1 繼承Thread類
2.2 實現Runnable接口
3.線程中run()與start()的區別
3.1 run方法是指一個線程要執行的內容
3.2 start方法是指將線程的狀態變成就緒狀態,線程是否執行是取決於cup的調度
4.線程中的調度
4.1 sleep方法:線程休眠多長時間
4.2 join方法: 等待join方法的線程變成消亡狀態
4.3 setPriority方法:設置線程的優先級,值越大 獲取cup調度的資源就越大
4.4 yeild方法:線程讓步,讓當前線程變成就緒狀態,雖然說是讓步但是很有可能立即執行
4.5 stop方法:強制停止當前線程,但是這樣做不安全,因此jdk標記成了過時方法
4.6 interrupt方法:優雅停止線程(設置一個可以停止線程的信號,實際上停止與否應該看線程所執行的業務結果可以通過isinterrupt來判斷當前線程是否可以停止)
5.線程的狀態
6.並行於並發
6.1 並行真正的意義上的同時執行
6.2 通過CPU的調度,同一時刻只有一個線程執行
7.並發帶來的問題
多線程,原子,可見,有序,詳細講解:
7.1 原子性:同一個線程在執行的的時候不能被其他線程打斷
7.2 可見性:當線程改變一個值後一定要讓其他線程看到最新的結果 volitile:可見性關鍵字,保證線程一定能夠獲取到主內存最新更改的值
7.3 即程序執行的順序按照代碼的先後順序執行
8.wait於sleep的區別
1: wait是Object裏邊的發方法,sleep是Thread的方法
2: wait會自動釋放鎖,sleep不會
3: wait必須配合sychronized關鍵字一起使用
9.實現死鎖
package com.zhibo.zyw.bdnq.test;
import com.zhibo.zyw.bdnq.test.DeadLock.*;
/**
* @program: ThreadProject
* @author: zyw
* @create: 2018-06-26 18:14
**/
public class ProducerAndConsumer {
public static void main(String[] args) {
Thread thread1 = new Thread(new DeadLockThread(true));
Thread thread2 = new Thread(new DeadLockThread(false));
thread1.start();
thread2.start();
}
}
package com.zhibo.zyw.bdnq.test; /** * @program: ThreadProject * @author: zyw * @create: 2018-06-26 18:22 **/ public class DeadLock { private static Object monitor1 = new Object(); private static Object monitor2 = new Object(); public static class DeadLockThread implements Runnable { private boolean type; public DeadLockThread(boolean type) { this.type = type; } @Override public void run() { if (type) { synchronized (monitor1) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } synchronized (monitor2) { } } else { synchronized (monitor2) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } synchronized (monitor1) { } } } } }
今天小編就先寫到這裏,有什麽疑問的可以留言歐!
java多線程的深入分析