併發學習(四) 多執行緒有序執行

2021-08-20 04:15:01 字數 2172 閱讀 9385

在看了這些多執行緒的知識之後,突發奇想到怎麼讓多執行緒有序執行呢?

第一種:用thread.join()方法來確定該執行緒執行完畢

第二種:用執行緒池的佇列來執行任務

第三種:用公共鎖object,配合wait/notifyall方法,睡眠自己,喚醒另乙個執行緒~

join方法是阻塞的,會一定等到取消或者超時為止,這樣就可以按順序來。

再來乙個,

@slf4j

public class joinexample1 is first", thread.currentthread().getname());

},"執行緒1");

final thread t2 = new thread(() -> is second", thread.currentthread().getname());

}catch (interruptedexception e)

},"執行緒2");

final thread t3 = new thread(() -> is third", thread.currentthread().getname());

}catch (interruptedexception e)

},"執行緒3");

t2.start();

t3.start();

t1.start();

//順序sart是沒有關係的}}

public class joinexample2 , the first 執行了!", thread.currentthread().getname());

},"執行緒1");

final thread t2 = new thread(() -> , the second 執行了!", thread.currentthread().getname());

}, "執行緒2");

final thread t3 = new thread(() -> , the third 執行了!", thread.currentthread().getname());

}, "執行緒3");

executorservice exec = executors.newsinglethreadexecutor();

exec.submit(t1);

exec.submit(t2);

exec.submit(t3);

exec.shutdown();}}

由於執行緒池中只有乙個,所以預設就它乙個能執行的執行緒~~

多執行緒(併發)學習筆記

1,無論以哪種方式啟動乙個執行緒,要給執行緒乙個名字,對排錯 監控有幫助。2,要對執行緒interrupt做處理。3,futrure 是任務的提交者和執行者之間的通訊手段,get 會阻塞 executorservice executor executors.newsinglethreadexecut...

多執行緒學習(四)

boost shared mutex 這個配合boost shared lock類這個相當於讀鎖 巢狀鎖不是乙個很好的選擇,盡量嘗試更改資料結構 條件和期望 執行緒會等待乙個特定事件的發生,或者等待某一條件達成。這可能定期檢查任務完成。需要進行同步,可以利用期望和條件達成同步。例子如下 class ...

多執行緒併發

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