3

class Tester{

private boolean flag = true ;//設(shè)置標(biāo)志位,初始時(shí)先生產(chǎn)

private Lock lock = new ReentrantLock();

private Condition condition = lock.newCondition(); //產(chǎn)生一個(gè)Condition對(duì)象

publicvoid Method1(){

lock.lock();

try{

while(!flag){

condition.await() ;

}

//Do sth

flag= false ; //改變標(biāo)志位胎撤,表示可以取走

condition.signal();

}catch(InterruptedException e){

e.printStackTrace() ;

}finally{

lock.unlock();

}

}

public void Method2(){

lock.lock();

try{

while(flag){

condition.await() ;

}

//Do sth

flag= true ;//改變標(biāo)志位瓮钥,表示可以生產(chǎn)

condition.signal();

}catch(InterruptedException e){

e.printStackTrace() ;

}finally{

lock.unlock();

}

}

}

class Producer implements Runnable{

private Tester producerTester = null ;

public Producer(Tester producerTester){

this.producerTester = producerTester ;

}

public void run(){

boolean flag = true ;

for(int i=0;i<10;i++){

this.producerTester.Method1();

if(flag){

flag = false ;

}else{

flag = true ;

}

}

}

}

class Consumer implements Runnable{

private Tester consumerTester = null ;

public Consumer(Tester consumerTester){

this.consumerTester = consumerTester ;

}

public void run(){

for(int i=0;i<10;i++){

this.consumerTester.Method2() ;

}

}

}

public class ThreadCaseDemo{

public static void main(String args[]){

Tester tester = new Tester();

Producer pro = new Producer(tester) ;

Consumer con = new Consumer(tester) ;

new Thread(pro).start() ;

try{

Thread.sleep(500) ;

}catch(InterruptedException e){

e.printStackTrace() ;

}

new Thread(con).start() ;

}

}

讀寫鎖:

通過synchronized獲取的互斥鎖不僅互斥讀寫操作、寫寫操作俊马,還互斥讀讀操作,而讀讀操作時(shí)不會(huì)帶來數(shù)據(jù)競(jìng)爭(zhēng)的,因此對(duì)對(duì)讀讀操作也互斥的話萝嘁,會(huì)降低性能。Java 5中提供了讀寫鎖扬卷,它將讀鎖和寫鎖分離牙言,使得讀讀操作不互斥。


[if !supportLists]1[endif]線程池使用

包:java.uitl.concurrent.ThreadPoolExecutor

[if !supportLists]1.1[endif]線程池類型

public class ThreadPoolExecutor extendsAbstractExecutorService {

.....

public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,longkeepAliveTime,TimeUnit unit, BlockingQueue workQueue);

public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,longkeepAliveTime,TimeUnit unit, BlockingQueueworkQueue,ThreadFactory threadFactory);

public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnitunit, BlockingQueue workQueue,RejectedExecutionHandlerhandler);

public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,longkeepAliveTime,TimeUnit unit, BlockingQueueworkQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler);

...

}

corePoolSize:核心池的大小怪得。在創(chuàng)建了線程池后咱枉,默認(rèn)情況下,線程池中并沒有任何線程徒恋,而是等待有任務(wù)到來才創(chuàng)建線程去執(zhí)行任務(wù)蚕断,除非調(diào)用了prestartAllCoreThreads()或者prestartCoreThread()方法,從這2個(gè)方法的名字就可以看出入挣,是預(yù)創(chuàng)建線程的意思亿乳,即在沒有任務(wù)到來之前就創(chuàng)建corePoolSize個(gè)線程或者一個(gè)線程。默認(rèn)情況下径筏,在創(chuàng)建了線程池后葛假,線程池中的線程數(shù)為0,當(dāng)有任務(wù)來之后滋恬,就會(huì)創(chuàng)建一個(gè)線程去執(zhí)行任務(wù)聊训,當(dāng)線程池中的線程數(shù)目達(dá)到corePoolSize后,就會(huì)把到達(dá)的任務(wù)放到緩存隊(duì)列當(dāng)中恢氯;

maximumPoolSize:線程池最大線程數(shù)带斑,表示在線程池中最多能創(chuàng)建多少個(gè)線程;

keepAliveTime:表示線程沒有任務(wù)執(zhí)行時(shí)最多保持多久時(shí)間會(huì)終止酿雪。默認(rèn)情況下遏暴,只有當(dāng)線程池中的線程數(shù)大于corePoolSize時(shí)侄刽,keepAliveTime才會(huì)起作用指黎,直到線程池中的線程數(shù)不大于corePoolSize,即當(dāng)線程池中的線程數(shù)大于corePoolSize時(shí)州丹,如果一個(gè)線程空閑的時(shí)間達(dá)到keepAliveTime醋安,則會(huì)終止,直到線程池中的線程數(shù)不超過corePoolSize墓毒。但是如果調(diào)用了allowCoreThreadTimeOut(boolean)方法吓揪,在線程池中的線程數(shù)不大于corePoolSize時(shí),keepAliveTime參數(shù)也會(huì)起作用所计,直到線程池中的線程數(shù)為0柠辞;

unit:參數(shù)keepAliveTime的時(shí)間單位,有7種取值主胧,在TimeUnit類中有7種靜態(tài)屬性:

[if !supportLists]l[endif]TimeUnit.DAYS;//天

[if !supportLists]l[endif]TimeUnit.HOURS;//小時(shí)

[if !supportLists]l[endif]TimeUnit.MINUTES;//分鐘

[if !supportLists]l[endif]TimeUnit.SECONDS;//秒

[if !supportLists]l[endif]TimeUnit.MILLISECONDS;//毫秒

[if !supportLists]l[endif]TimeUnit.MICROSECONDS;//微妙

[if !supportLists]l[endif]TimeUnit.NANOSECONDS;//納秒

workQueue:一個(gè)阻塞隊(duì)列叭首,用來存儲(chǔ)等待執(zhí)行的任務(wù)习勤,這個(gè)參數(shù)的選擇也很重要,會(huì)對(duì)線程池的運(yùn)行過程產(chǎn)生重大影響焙格,一般來說图毕,這里的阻塞隊(duì)列有以下幾種選擇:

[if !supportLists]l[endif]ArrayBlockingQueue;

[if !supportLists]l[endif]LinkedBlockingQueue;

[if !supportLists]l[endif]SynchronousQueue;

ArrayBlockingQueue使用較少,一般使用LinkedBlockingQueue和Synchronous眷唉。線程池的排隊(duì)策略與BlockingQueue有關(guān)予颤。

threadFactory:線程工廠,主要用來創(chuàng)建線程冬阳;

handler:表示當(dāng)拒絕處理任務(wù)時(shí)的策略蛤虐,有以下四種取值:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市肝陪,隨后出現(xiàn)的幾起案子笆焰,更是在濱河造成了極大的恐慌,老刑警劉巖见坑,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嚷掠,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡荞驴,警方通過查閱死者的電腦和手機(jī)不皆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來熊楼,“玉大人霹娄,你說我怎么就攤上這事■昶” “怎么了犬耻?”我有些...
    開封第一講書人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)执泰。 經(jīng)常有香客問我枕磁,道長(zhǎng),這世上最難降的妖魔是什么术吝? 我笑而不...
    開封第一講書人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任计济,我火速辦了婚禮,結(jié)果婚禮上排苍,老公的妹妹穿的比我還像新娘沦寂。我一直安慰自己,他們只是感情好淘衙,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開白布传藏。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪毯侦。 梳的紋絲不亂的頭發(fā)上西壮,一...
    開封第一講書人閱讀 49,842評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音叫惊,去河邊找鬼款青。 笑死,一個(gè)胖子當(dāng)著我的面吹牛霍狰,可吹牛的內(nèi)容都是我干的抡草。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼蔗坯,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼康震!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起宾濒,我...
    開封第一講書人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤腿短,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后绘梦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體橘忱,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年卸奉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了钝诚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡榄棵,死狀恐怖凝颇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情疹鳄,我是刑警寧澤拧略,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站瘪弓,受9級(jí)特大地震影響垫蛆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜杠茬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一月褥、第九天 我趴在偏房一處隱蔽的房頂上張望弛随。 院中可真熱鬧瓢喉,春花似錦、人聲如沸舀透。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至走贪,卻和暖如春佛猛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背坠狡。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工继找, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人逃沿。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓婴渡,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親凯亮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子边臼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容