1. 程式人生 > >Java中的多執行緒(五大經典同步問題Scenario等)

Java中的多執行緒(五大經典同步問題Scenario等)

What

A thread is a lightweight sub process, a smalleset unit of processing. It is a separate path of execution. 每個執行緒是獨立的,如果一個執行緒發生了異常是不會影響到另外的執行緒的。但是同一個程序的所有執行緒都共享同一塊記憶體。下圖可以幫助理解一下。


(https://www.javatpoint.com/multithreading-in-java)

關於多執行緒有以下幾個方面是需要掌握的知識點:

1.執行緒同步

2.執行緒間通訊

3.執行緒死鎖

4執行緒控制:掛起、停止和恢復。

接下來有五大經典同步問題:

1. 生產者-消費者問題

有一個buffer, 生產者生產產品之後放入這裡,消費者從這個buffer取出產品,我們要確保當buffer滿了,生產者不放入產品,當buffer空了,消費者不取出產品。實現的大概流程如下:

當buffer滿了,生產者就去sleep,一直當有消費者從buffer中取出產品,在notify生產者,繼續生產。當buffer空了,消費者進入sleep, 當生產者又生產了產品,就去notify消費者,讓消費者可以取出產品。如果處理不好,就會產生死鎖,比如說兩個人都sleep了,再也沒有一方可以被喚醒。一般來說,使用程序間通訊,加入一個訊號標的概念(semaphore)來解決這個問題。

這個問題是最終看了youtube上面的公開課理解的。自己在紙上多畫畫圖,多跟著整體思路走一走,就會很好理解。