在看了這些多執行緒的知識之後,突發奇想到怎麼讓多執行緒有序執行呢?
第一種:用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...