> ### Thread類方法
* yield
~~~
yield是native修飾的原生方法,作用是當前線程讓出執行機會,讓cpu可以優先調用其它線程。
?
特點:
1.當前線程不會阻塞,同樣有執行機會
2.靜態方法,一般用于當前線程讓步
3.如果獲得鎖,不會釋放
~~~
* join
~~~
線程讓另一個線程先執行完后再執行。
?
特點:
1. 當前線程阻塞,直到加入線程執行完畢
2. 方法響應終斷
3. 如果獲得鎖,不會釋放
~~~
ep:
~~~
public static void main(String arg[]){
? ? Thread A = new Thread();
? ? A.join(); // 表示當前線程(main)讓A線程執行完畢后繼續執行
}
~~~
* sleep
~~~
靜態方法,表示讓當前線程睡眠一段時間。
?
特點:
1.當前線程阻塞,直到睡眠時間結束
2.方法響應終斷
3.如果獲得鎖,不會釋放
~~~
* stop、suspend、resume
~~~
stop:
?
1. 即刻停止run()方法中剩余的全部工作,包括在catch或finally語句中,并拋出ThreadDeath異常(通常情況下此異常不需要顯示的捕獲),因此可能會導致一些清理性的工作的得不到完成,如文件,數據庫等的關閉。
?
2. 會立即釋放該線程所持有的所有的鎖,導致數據得不到同步的處理,出現數據不一致的問題。
~~~
~~~
suspend和resume:
?
這兩個方法一般會同時出現,否則會容易發生死鎖。suspend將線程掛起,只有調用resume才能重新執行。線程掛起期間,并不會去釋放任何擁有的鎖資源。
~~~
> ### Object類方法
- wait 和 notify
~~~
wait 將當前線程掛起,釋放鎖資源, 直到執行notify或者notifyAll激活該線程重新執行。
?
notify 激活一個阻塞的線程。
?
notifyAll 激活所有阻塞的線程
~~~
* [ ] tip: wait、notify、notifyAll都是Object里的方法,和任何Object都能成為synchronized的鎖對象一樣,這些方法和鎖之間存在著關聯,當任何對象使用方法時必須在同步方法塊或者同步方法中執行,并且鎖對象必須為執行方法的對象。
* [ ] ep:
~~~
static Object lock = new Object();
?
public static void main(String []arg) throws Exception{
? ? ?new Thread(()->{
? ? ? ? ?synchronized(lock){
? ? ? ? ? ? ?System.out.println("線程等待");
? ? ? ? ? ? ? try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
? ? ? ? }
? ? ? ? ?System.out.println("線程執行完成");
? ? },"等待").start();
? ?
? ? Thread.sleep(1000);
? ?
? ? new Thread(()->{
? ? ? ? ?synchronized(lock){
? ? ? ? ? ? ?System.out.println("激活線程");
? ? ? ? ? ? ?lock.notify();
? ? ? ? }
? ? },"激活").start();
? ?
? ?System.in.read();
}
~~~
- 2111總結
- 1.面向對象
- 1.0.1 super()與this()的區別
- 1.0.2 private、default、protected、public的訪問范圍
- 1.0.3 continue、break、return區別
- 1.0.4 重載和重寫的區別
- 1.0.5 final的特點
- 1.0.6 抽象類與接口的區別
- 1.0.7 java類型
- 1.0.8 什么是反射
- 1.0.9 類的加載機制
- 1.1.1 jvm內存結構
- 1.1.2 java垃圾回收機制
- 1.1.3 并發問題
- 1.1.3.1 線程的狀態與關系
- 1.1.3.2 并發的三大性質
- 1.1.3.3 線程的實現與使用
- 1.1.3.4 線程池相關
- 1.1.3.5 并發相關方法
- 1.1.3.6 線程相關工具
- 1.1.4 jdk8特性
- 1.1.4.1 lambad表達式的使用
- 1.1.4.2 stream API
- 1.1.4.3 Optional容器使用
- 1.1.4.4 LocalDateTime
- 1.15 io流
- 1.16 動態代理實現
- 2.JavaEE
- 2.0.1 JSP四大作用域九大內置對象
- 2.0.2 cookie與session的區別
- 4.數據庫相關
- 5.git版本管理
- 7.一些問題解決
- 7.1 分布式鎖如何實現