在學習多執行緒之前,我們需要知道什麼是執行緒,當然也少不了需要知道什麼是程序。這裡僅僅是放兩句比較簡單的話,有個印象就行,畢竟執行緒和程序的概念網上一大堆,記大多其實也沒啥用。
但是呢,面試的時候又喜歡問一些概念性的東西,所以這裡還是需要把比較重要的概念記錄一下。
知道了程序和執行緒的概念之後,我們在看一下什麼是併發,什麼是並行。
至於我們說多執行緒就是併發,那我們來看一下併發中的三個問題:
用來表示一種公共資源或是共享資料,可以被多個執行緒使用。同一時間只能有乙個執行緒訪問臨界區(阻塞狀態),其他資源必須等待。
首先,在解釋這個問題之前,我們需要知道wait方法和notify方法的用法。
我們都知道,wait和notify方法都需要在synchronized關鍵字包裹的**中執行才可以。那在此之前我們看一下synchronized關鍵字的用法:
// 第一種
public
class
}// 第二種
public
class
}// 第三種
public
class}}
// 第四種
public
class
}}
我們需要明確,synchronized關鍵字鎖的是什麼?鎖的是物件,不管是以上哪種方式出現,鎖的都是物件。
當然,除了上述四種使用,我們可以使用任何物件當鎖。比如object o = new object()
是用o當鎖物件。即(monitor).
如下:
public
class
}}
到這裡,synchronized 內建鎖的用法就差不多了,我們看一下wait方法和notify方法。為什麼在說wait方法和notify方法之前需要介紹synchronized關鍵字的用法呢,是因為wait方法和notify方法是需要在synchronized關鍵字作用的**中使用的。如下:
public
synchronized
void
method()
catch
(interruptedexception e)
}public
static
void
main
(string[
] args)
throws interruptedexception }.
start()
;/** 等待 new thread 執行*/
thread.
sleep
(1000);
synchronized
system.out.
println
("running here.");
}
通過上面**可以看到,wait方法和notify方法都是作用在synchronized關鍵字的**中。我們使用哪個物件去做鎖物件(monitor), 就需要使用哪個物件去呼叫wait方法,否則會丟擲illegalmonitorstateexception
非法monitor狀態異常,其實就是monitor和呼叫的方法不一致。
同樣,如果是static方法,則需要使用類物件來wait和notify:
public
static
synchronized
void
method()
catch
(interruptedexception e)
}public
static
void
main
(string[
] args)
throws interruptedexception }.
start()
;/** 等待 new thread 執行*/
thread.
sleep
(1000);
synchronized
class
) system.out.
println
("running here.");
}
總結:
到這裡我們就可以回答這個問題了:
q: 為什麼wait方法和notify方法會設計到object類中。
a: 因為鎖物件monitor可以是任何物件,而wait方法和notify方法 又只能被monitor物件呼叫。所以wait方法和notify方法一定要設計到object類中。
python併發程式設計之多執行緒
程序包含了執行該程式所需要所有資源 程序是乙個資源單位 執行緒是cpu的最小執行單位 每乙個程序一旦被建立 就預設開啟了一條執行緒 稱之為主線程 使用執行緒可以提高程式效率 為何不用多程序提高效率 是因為程序對作業系統的資源耗費非常高 執行緒共享建立它的程序的位址空間 程序有自己的位址空間。執行緒可...
1 3併發程式設計之多執行緒通訊
多執行緒之間通訊,其實就是多個執行緒在操作同乙個資源,但是操作的動作不同。1.因為涉及到物件鎖,他們必須都放在synchronized中來使用.wait notify一定要在synchronized裡面進行使用。2.wait必須暫定當前正在執行的執行緒,並釋放資源鎖,讓其他執行緒可以有機會執行 3....
python併發程式設計之多執行緒一
一,什麼是執行緒 執行緒也被稱為輕量程序電腦科學術語,指執行中的程式的排程單位。執行緒是程序中的實體,乙個程序可以擁有多個執行緒,乙個執行緒必須有乙個父程序。執行緒不擁有系統資源,只有執行必須的一些資料結構 它與父程序的其它執行緒共享該程序所擁有的全部資源。執行緒可以建立和撤消執行緒,從而實現程式的...