多執行緒 併發(很亂)

2021-08-20 05:43:13 字數 1619 閱讀 2376

先複習下

我們先了解一下thread的幾個重要方法。

a、start()方法,呼叫該方法開始執行該執行緒;

b、stop()方法,呼叫該方法強制結束該執行緒執行;

c、join方法,呼叫該方法等待該執行緒結束,用於主線程等待子執行緒執行結束。

d、sleep()方法,呼叫該方法該執行緒進入等待。

e、run()方法,呼叫該方法直接執行執行緒的run()方法,但是執行緒呼叫start()方法時也會執行run()方法,區別就是乙個是由執行緒排程執行run()方法,乙個是直接呼叫了執行緒中的run()方法!!

自己的理解:

首先object提供了wait和notify,網上很多都講得非常奇怪

這兩個方法是必須要跟synchronize一起用的,否則會異常。

所以,它和sleep是沒有可比性的,sleep是操控執行緒,而它是操控物件

lock介面最常用的:

1. reentrantlock

/**

* 執行結果:

* 執行緒b得到了鎖...

* 執行緒b釋放了鎖...

* 執行緒a得到了鎖...

* 執行緒a釋放了鎖...

*/public class locktest ;

}.start();

new thread("b") ;

}.start();

}public void insert(thread thread)

} catch (exception e) finally }}

2. reentrantreadwritelock  讀寫鎖

/**

* thread-0正在進行讀操作

* thread-0正在進行讀操作

* thread-1正在進行讀操作

* thread-1正在進行讀操作

* thread-1正在進行讀操作

* thread-1正在進行讀操作

* thread-1正在進行讀操作

* thread-1正在進行讀操作

* thread-1正在進行讀操作

* thread-0正在進行讀操作

* thread-1讀操作完畢

* thread-0讀操作完畢

* 讀寫鎖並不會真正去檢查你是否在讀 是否在寫

* 關鍵在於你怎麼用它

*/public class readlocktest

};final thread thread1 = new thread()

};thread.start();

thread1.start();

}public void get(thread thread)

system.out.println(thread.getname() + "讀操作完畢");

} finally }}

多執行緒併發

多執行緒併發主要有3個方面 1 同步器 主要有synchronized,reentrantlock 訊號量,門栓 countdownlatch 障柵 cyclicbarrier 交換器。2 同步容器 主要包括 對映 集 佇列 對映 concurrenthashmap,concurrentskipli...

多執行緒併發

更簡單的執行緒池 多執行緒和多程序都可以很容易的實現併發,協程通過切換上下文來充分利用cpu實現併發效果 threading模組 thread類的基本狀態和行為 屬性名和值 name none,group none,target none,args kwargs daemon none 方法 sta...

(多執行緒)多執行緒的併發安全

多執行緒併發操作同乙個資源 同步鎖 多執行緒操作的鎖必須唯一 必須搞清楚 哪些 需要同步?那些在操作共享資源的 只要包含非讀的操作,或者根據共享資源進行條件判斷的,就需要同步!同步 塊解決 package com.gc.thread 多執行緒操作共享資源 併發 執行緒安全問題 同步 鎖 相對而言效能...