JAVA學習55-執行緒同步及JUC安全集合擴充知識
執行緒同步
由於我們通常通過private關鍵字來保證資料物件只能被方法訪問,所以我們爭對方法提出了一套機制,就是synchronized關鍵字。
synchronized方法控制物件的訪問,每個物件對應一個鎖。
1.同步方法
public synchronized void method(int args){}
2.同步塊
synchronized(鎖的物件){}//鎖的物件就是變化的量,需要增加,刪除,修改的物件
缺點:若將一個大的方法宣告為synchronized將會影響效率。
//不安全的案例
//執行緒不安全,出現了負數,因為沒有同步執行緒,讓他們排隊買票
public class UnsafeBuyTicket {
public static void main(String[] args) {
//設定執行緒同步
/*Thread thread=new Thread();
thread.setDaemon(true);
thread.start();
*/
BuyTicket station = new BuyTicket();
new Thread(station,"苦逼的我").start();
new Thread(station,"牛逼的你們").start();
new Thread(station,"可惡的黃牛黨").start();
}
}
//買票的執行緒
class BuyTicket implements Runnable {
//票
private int ticketNum = 10;
boolean flag = true;//外部停止方式
@Override
public void run() {
while (true) {
try {
buy();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//買票的方法
//加入同步方法synchronized
//synchronized 同步的是本身,要同步別的方法,就要用到synchronized同步塊
//鎖的物件就是變化的量,需要增加,刪除,修改的物件
private synchronized void buy() throws InterruptedException {
//判斷是否有票
if (ticketNum <= 0) {
return;
}
Thread.sleep(100);
System.out.println(Thread.currentThread().getName() + "買到了第" + ticketNum-- + "張票");
}
}
JUC安全集合擴充知識
import java.util.concurrent.CopyOnWriteArrayList;
//CopyOnWriteArrayList在concurrent包裡面
//測試JUC安全型別的集合
//這個類本來是安全的
public class TestJUC {
public static void main(String[] args) {
//CopyOnWriteArrayList這個類本來是安全的
CopyOnWriteArrayList<String> list=new CopyOnWriteArrayList<String>();
for (int i = 0; i < 1000; i++) {
new Thread(()->{
list.add(Thread.currentThread().getName());
}).start();
}
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(list.size());
}
}
相關文章
- Java多執行緒學習(五)執行緒間通訊知識點補充Java執行緒
- JavaEE進階知識學習----多執行緒JUC高階知識-5-執行緒池-Callable-執行緒排程Java執行緒
- JUC之集合中的執行緒安全問題執行緒
- java執行緒學習5——執行緒同步之同步方法Java執行緒
- JAVA執行緒中的安全知識Java執行緒
- 【Java多執行緒】執行緒安全的集合Java執行緒
- #大學#Java多執行緒學習02(執行緒同步)Java執行緒
- JAVA學習知識集合Java
- 執行緒學習知識總結執行緒
- Java多執行緒學習(3)執行緒同步與執行緒通訊Java執行緒
- java中執行緒安全的集合Java執行緒
- JAVA基礎知識系列---程式、執行緒安全Java執行緒
- JAVA基礎知識系列—程式、執行緒安全Java執行緒
- java各種集合的執行緒安全Java執行緒
- 擴充套件Delphi的執行緒同步物件(1) (轉)套件執行緒物件
- JUC(4)---java執行緒池原理及原始碼分析Java執行緒原始碼
- 執行緒同步及執行緒鎖執行緒
- Java執行緒同步的方法--Java免費學習網Java執行緒
- Java併發-執行緒安全的集合類Java執行緒
- 【初識】-JUC·ThreadPoolExecutor 執行緒池thread執行緒
- 多執行緒基礎必要知識點!看了學習多執行緒事半功倍執行緒
- Java執行緒狀態及同步鎖Java執行緒
- java 執行緒學習Java執行緒
- java執行緒學習Java執行緒
- 什麼時候執行緒不安全?怎樣做到執行緒安全?怎麼擴充套件執行緒安全的類?執行緒套件
- Java多執行緒相關知識Java執行緒
- Java—執行緒同步Java執行緒
- 6.JUC執行緒高階-Lock同步鎖執行緒
- Java執行緒安全的集合類:Map、List、SetJava執行緒
- .Net 執行緒安全集合執行緒
- 多執行緒的同步和非同步學習執行緒非同步
- java學習回顧---執行緒和同步程式碼塊Java執行緒
- Java多執行緒學習——執行緒通訊Java執行緒
- Java多執行緒學習(2)執行緒控制Java執行緒
- Java多執行緒學習Java執行緒
- Java 執行緒池學習Java執行緒
- 記錄Java執行緒相關知識Java執行緒
- java併發程式設計JUC第九篇:CountDownLatch執行緒同步Java程式設計CountDownLatch執行緒