亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Java基礎之多線程

2024-07-14 08:42:21
字體:
來源:轉載
供稿:網友

線程中run()和start()的區別:
對于Thread對象來說,當你調用的是start(),線程會被放到等待隊列,等待CPU調度,不一定馬上執行;無需等待run()方法執行完畢,可以直接執行下面的代碼;
而調用的是run()的話,就是當做普通的方法調用,程序還是要順序執行的;
新建線程的幾種方式:
實現Runnable接口;里面實現run()方法;
然后把這個實現了Runnable接口的類就新建為一個Thread t = new Thread(new (實現Runnable接口的類)),調用start()方法即可開始一個線程了。記住,start()只是開啟,然后就會返回,繼續執行start()下面的語句了。

線程執行器:
我們可以通過不同的線程執行器來實現多線程的執行,有以下幾種執行器:

ExecutorService exec = Executors.newCachedThreadPool();

ExecutorService exec = Executors.newFixedThreadPool(5);

ExecutorService exec = Executors.newSingleThreadExecutor();

我們可以對比一下這三者的區別:第一個執行會為每一個任務都創建一個線程,
而第二個則是可以一次性指定要分配多少線程,而第三個則是屬于單線程,會一個線程一個線程的依次執行;

休眠:
會使得任務中斷一段時間,相當于變相的阻塞了,可以給其他線程制造機會去執行;
但是我們不能通過sleep()來試圖控制線程的順序執行,而是要考慮用同步控制來實現;

讓步:
通過使用yield()方法來給線程調度機制一個暗示:你的工作已經完成的差不多了,可以讓別的線程使用CPU了,其功能上跟sleep()其實是差不多的。

后臺線程:
指在程序運行的時候在后臺提供一種通用服務的線程,并且這種線程并不屬于程序總共不可或缺的部分,當所有非后臺線程結束時,程序終止;由后臺線程創建的線程也是后臺線程;
在線程調用start()之前,調用setDaemon(true);

實現多線程的另一種方式:
通過繼承Thread的方式來實現:而且run()方法是放在構造函數里面的,也就是說,當初始化一個線程的時候,就自動的開啟了線程,記得run()方法里面一般都是一個while()循環;

加入一個線程:
一個線程可以在其他線程之上調用join()方法,如果某個線程在另一個線程t上調用t.join();此線程將被掛起,知道目標線程t結束才恢復;
join()方法,你在一個線程中join()了一個線程進來,你就要等待這個線程結束了,才可以把自己這個線程給結束掉;join()的底層實現是wait()方法;

同步:
Synchronzied;可以用在方法上,也可以用到類上面;

顯式地使用lock對象
先用Lock lock = new ReentrantLock();建出一個鎖對象出來,然后在方法里面,先調用lock.lock();然后try語句里面是方法體,最后記得要在finally里面加上lock.unlock();這樣就就相當于解鎖了。

區別:
可以看到synchronized lock相比起來,lock似乎要加上一些try/catch語句才可以,但是,這也是好處之一,比起synchronized,可以多出來處理的過程,讓用戶出現錯誤的可能性降低;
使用原子類也可以實現資源共享的問題,但是原子類一般很少在常規編程中用到,用于性能調優,然后AtomicInteger,AtomicLong等原子類,使用這些的時候,不需要用到synchronized和lock,但是原子類很少用到,所以我們還是用synchronized和lock。

線程的狀態:
新建;就緒;阻塞;死亡;

導致阻塞的幾個原因:
1,通過調用sleep()使任務進入休眠狀態,

2,通過調用wait()使線程掛起,知道線程得到notify()notifyAll()消息,

3,任務再等待某個輸入/輸出完成;

4,任務視圖在某個對象上調用其同步控制方法,但是對象鎖不可用,因為另一個任務已經獲取了這個鎖;

中斷:
這是一個大學問呀。一般的話,我們中斷都是用interrupted(),但是,我們現在說了,用Executor執行器可以更好地執行了,所以我們如如何在執行器中中斷線程呢?這也很好辦,用Executor的shutdownNow(),但是,這又是一個問題了,這只是用來中斷所有的線程的,但是我們是想要中斷某一個線層那該怎么辦呢?這就用到了返回式了,通過submit()來啟動任務的時候,我們就能夠得到返回的類型Future<?>通過這個去調用calcel()來中斷某個線程。具體等一下碼,現在還要討論的還有一個問題,中斷的線程是否有一些是無法中斷的,判定如下:如果是在sleep()中的線程,那么顯然是可以中斷的,但是對于正在讀取I/O的線程和正在試圖獲取鎖的線程,我們是無法中斷的,而中斷線程就相當于拋出了一個異常,方便我們關閉掉資源。

線程之間的協作:
當線程同時運行多個任務時,我們可以用鎖來同步兩個任務的行為,同時也可以用wait()notifyAll()來實現對線程的控制;
wait()就是一種掛起的狀態,當你掛起了之后,鎖將被釋放,把空出來的線程,給別人執行,而等到被調用notify()喚醒之后,又會重新獲得之前wait()鎖,如果這個時候鎖正在被使用的話,就要陷入等待了。

wait()跟sleep()之間的區別:
1,在synchronized中,wait()期間對象鎖是釋放的;而sleep()鎖是不會釋放的;

2,可以通過notify(),notifyAll(),或者令時間到期,從wait()中恢復執行;

喚醒的區別:
notify()方法保證的喚醒是指喚醒的是恰當的任務,另外,為了使用notify(),你必須等待相同的條件,而對于notifyAll()來說,是否所有的線程都會被喚醒呢?只有當notifyAll()因某個特定鎖被調用時,只有等待這個鎖的任務才能被喚醒;

除了wait()和notify(),我們還可以顯式地使用lock和Condition對象;
使用互斥并允許任務掛起的基本類是Condition;可以通過在Condition上調用await來掛起一個任務,通過signal()來通知這個任務,喚醒這個任務,或者調用signalAll()來喚醒所有在這個Condition上被其自身掛起的任務;與使用notify()相比,signlAll()是更安全的方式;

 

Lock lock = new ReentrantLock();Condition condition = lock.newCondition();lock.lock();lock.unlock();condition.await();

 

但是我們要知道顯式的lock對象,相比起wait(),notify()來說,更加復雜,所以還是建議用回原來的那個wait(),LockCondition只有在更加困難的多線程問題才是必需的;

死鎖:
當某一個任務在等待另一個任務的鎖釋放,而下一個任務又在等待上一個鎖的釋放,在這樣呈鏈式的循環里面,直到這個鏈條上的任務又在等待第一個任務釋放鎖,得到了一個任務之間的相互等待的連續循環;稱為死鎖;
哲學家就餐問題;經典的死鎖問題;
發生死鎖的四個滿足條件:

1,互斥條件,任務使用的資源中國至少有一個是不能共享的。

2,至少有一個任務它必須持有一個資源把那個正在等待獲取另一個被別的任務持有的資源;

3,資源不能被任務搶占;

4,必須要有等待循環;

防止死鎖的最容易的方式是破壞第四個條件。

總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。如果你想了解更多相關內容請查看下面相關鏈接


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲男人天堂2019| 国产亚洲欧美aaaa| 亚州国产精品久久久| 日韩欧美在线第一页| 欧美日韩国产一区中文午夜| 国产成人在线精品| 超碰91人人草人人干| 国产成一区二区| 久久精品国产一区二区三区| 91av网站在线播放| 亚洲视频精品在线| 亚洲a级在线观看| 欧美日韩国内自拍| 国产精品成熟老女人| 91免费人成网站在线观看18| 久久久久久成人精品| 国产有码在线一区二区视频| 国产中文字幕91| 欧美电影免费播放| 国产视频精品一区二区三区| 国产大片精品免费永久看nba| 国产成人精品视频在线| 亚洲男人天堂网站| 播播国产欧美激情| 日韩av电影在线网| 亚洲欧美另类在线观看| 日韩av在线一区二区| 国产精品视频一区二区高潮| 日韩美女免费线视频| 亚洲成人中文字幕| 国模私拍一区二区三区| 九九精品在线播放| 日韩av免费网站| 91精品视频在线免费观看| 国产精品综合网站| 久久亚洲精品中文字幕冲田杏梨| 中文字幕亚洲一区在线观看| 欧美日本精品在线| 国产精品7m视频| 久久精品亚洲热| 亚洲免费中文字幕| 精品国偷自产在线视频| 国产精品96久久久久久又黄又硬| 日韩精品电影网| 欧美日韩亚洲国产一区| 欧美激情影音先锋| 青青草国产精品一区二区| 神马久久桃色视频| 国产999精品久久久| 日韩免费在线视频| 国产精品日本精品| 久久99青青精品免费观看| 欧美日韩国产影院| 欧美丝袜一区二区| 亚洲精品视频免费| 97在线视频免费看| 一区二区三区日韩在线| 国产精品精品视频| 国产午夜精品美女视频明星a级| 亚洲综合在线中文字幕| 国产精品爽爽爽爽爽爽在线观看| 中文一区二区视频| 亚洲直播在线一区| 美女福利视频一区| 91精品国产乱码久久久久久蜜臀| 国产成人综合一区二区三区| 欧美激情在线一区| 668精品在线视频| 亚洲自拍偷拍网址| 亚洲一区二区少妇| 色老头一区二区三区在线观看| 97热在线精品视频在线观看| 色综合久久精品亚洲国产| 97久久伊人激情网| 欧美激情一二区| 国产精品va在线播放| 国产精品丝袜高跟| 爱福利视频一区| 成人免费看吃奶视频网站| 国产亚洲一区精品| 日韩视频在线一区| 日韩精品丝袜在线| 在线亚洲欧美视频| 国产精品极品美女粉嫩高清在线| www.99久久热国产日韩欧美.com| 一区二区三区亚洲| 欧美性猛交xxxx| 国产婷婷成人久久av免费高清| 国产精品第100页| 亚洲国产三级网| 亚洲香蕉成人av网站在线观看| 国产手机视频精品| 在线播放日韩精品| 成人免费高清完整版在线观看| 亚洲成av人片在线观看香蕉| 亚洲激情电影中文字幕| 高跟丝袜欧美一区| 亚洲精品资源在线| 日韩在线观看免费av| 久久亚洲国产精品| 亚洲自拍偷拍一区| 日本久久久久久久久| 国产成人精品在线视频| 欧美一区三区三区高中清蜜桃| 日韩经典一区二区三区| 久久精品国产v日韩v亚洲| 欧美成人亚洲成人日韩成人| 91深夜福利视频| 国产精品香蕉国产| 久久久av网站| 国产xxx69麻豆国语对白| 久久久av电影| 国产精品狠色婷| 国产不卡在线观看| 日韩在线免费高清视频| 国产在线精品一区免费香蕉| 久久精品国产清自在天天线| 狠狠色狠狠色综合日日小说| 日韩av一区在线| 国产亚洲欧美日韩美女| 日本精品免费一区二区三区| 亚洲国产一区二区三区四区| 8x海外华人永久免费日韩内陆视频| 黑人巨大精品欧美一区二区一视频| 欧美成人精品不卡视频在线观看| 亚洲午夜未删减在线观看| 精品视频久久久| 国产999精品视频| 91热福利电影| 8x海外华人永久免费日韩内陆视频| 国产精品免费一区二区三区都可以| 国产97在线播放| 福利精品视频在线| 北条麻妃在线一区二区| 国产精品视频大全| 乱亲女秽乱长久久久| 伊人男人综合视频网| 国产成人精品久久二区二区91| 成人字幕网zmw| 亚洲夜晚福利在线观看| 青草热久免费精品视频| 亚洲欧美国产一区二区三区| 成人欧美一区二区三区在线湿哒哒| 国产不卡在线观看| 久久亚洲精品成人| 国内精品一区二区三区四区| 欧美黑人xxx| 欧美性感美女h网站在线观看免费| 亚洲精品成人免费| 黄色成人av在线| 伊人伊成久久人综合网站| 久久精品久久久久久国产 免费| 久久久国产影院| 欧美激情一区二区三区在线视频观看| 成人激情视频在线| 91精品成人久久| 岛国av在线不卡| 午夜精品久久久久久久99热浪潮| 欧美老妇交乱视频| 亚洲电影免费在线观看| 久久久久女教师免费一区| 久久av资源网站| 久久乐国产精品| 日韩精品视频在线免费观看|