1.執行緒的五個狀態
建立、就緒、執行、阻塞、終止
2.start之後並不一定是立即執行,代表的是就緒狀態;
3.阻塞狀態: 阻塞狀態是正在執行的執行緒由於某種原因放棄cpu的使用權,進入就緒狀態;
有三種型別:
①執行的執行緒執行wait方法,執行緒被jvm放入等待池中;
②執行的執行緒獲取同步鎖時,該同步鎖被別的執行緒占用,執行緒被jvm放入同步鎖中;
③執行的執行緒執行sleep方法或join方法時,等睡眠時間超時的時候,join()等待執行緒,重新進入就緒狀態;
4.sleep() 執行緒睡眠,在睡眠超時之後進入就緒狀態,並不會釋放鎖;
wait():執行此方法時,當前執行緒暫停執行,直到其他執行緒呼叫此方法的notifyi()喚醒;
join():執行此方法時,當前執行緒暫停,讓執行此方法的執行緒執行完之後,在進入就緒狀態;
yield() :執行此方法時,將讓給優先順序更高或者同級的執行緒;讓當前執行狀態回到可執行狀態;
notify():
5.sleep()和yield()的區別
sleep()之後執行緒進入阻塞狀態直到超時,把機會讓給了其他執行緒
而yield()讓步是進入就緒狀態,是把機會給了同等優先順序或者更高優先順序的執行緒,自己也有可能再次被選中。
6.sleep()和wait()的區別
wait,notify和notifyall只能在同步控制方法或者同步控制塊裡面使用,而sleep可以在任何地方使用
在等待時 wait 會釋放鎖,而 sleep 一直持有鎖。wait 通常被用於執行緒間互動,sleep 通常被用於暫停執行;』
7.wait ()、notify()必須在synchronized(obj)一起使用,針對的是已經獲取到鎖的來進行等待操作,從功能上來說,使當前執行緒釋放鎖,同時讓該執行緒處於等待,一直到被喚醒,才能繼續獲取鎖;注意 :執行notify的時候,並不是立刻執行被喚醒,而是當前鎖內程式執行完後,從wait執行緒鎖中隨機找一線程對其解鎖;
執行緒池執行流程:
任務過來之後,檢視核心執行緒是否有空閒的,有則執行。
沒有,則檢視等待佇列是否滿了,如果不滿則插入佇列等待。
滿了,則判斷最大可容執行緒數沒有超過最大值,則開創非核心執行緒執行任務,則handle呼叫實現拒絕策略,
拒絕策略有四種:
不執行丟擲異常,執行緒池已經滿了;
不執行也不丟擲異常;
將訊息佇列中的第乙個替代為當前執行緒;
直接用excute進行執行當前任務;
常見的四種執行緒:
cachethreadpool : 可快取執行緒池,有核心執行緒,也有非核心執行緒(數量為沒有上線),有任務就處理,沒有任務就收回執行緒,適用於耗時少 任務量大的執行緒。 缺點建立執行緒數量多
singthreadpool:只有乙個執行緒,使使用者有順序執行的場景。缺點是:佇列堆積,消耗記憶體
fixedthreadpool:定長線程池,沒有非核心執行緒池,定長的,可控制線程最大併發數,超出的執行緒會在佇列中等待。缺點是:佇列堆積,消耗記憶體
secudlethreadpool: 週期性執行緒池,按照某種特定的計畫週期執行,非核心執行緒無線。缺點建立執行緒數量多
使用執行緒的好處:
節省資源;通過重複利用已經建立好的執行緒,節省了建立執行緒的資源消耗
提高響應速度;當任務來臨時,不必等執行緒建立,可以立即執行。
便於管理:使用執行緒池統一管理執行緒。
execute和submit的區別?
都是用來執行任務,但是submit有返回值
執行緒池都有哪幾種工作佇列
陣列有界佇列:原則是對元素進行排序
鍊錶結構的阻塞佇列:先進先出。
乙個不儲存元素的阻塞佇列。只有移除之後,後面的才可以進入,否則一直處於zuse
乙個具有優先順序的無限阻塞佇列();
執行緒配置:
執行緒基礎學習
一 執行緒與程序的關係 乙個應用程式可以存在多個程序例項,而乙個程序實列內部又可以同時包含多個執行緒.從理論上講,執行緒是程序內的單個執行單元,它是windows作業系統為cpu工作分配的乙個最小單位.執行緒主要由資料結構 堆疊和cpu暫存器組成.每乙個執行緒都可以在它的程序中單獨執行,並 儲存自已...
執行緒基礎 一
當多個執行緒訪問mythread的run方法時.以排隊的方式進行處理 這裡排隊順序時cpu排隊順序 乙個執行緒想要執行sychronized 體修飾的方法裡面的 1.獲得鎖 2.拿不到鎖 這個執行緒會不斷的拿鎖,直到拿到為止 不加鎖列印結果 當前執行緒名稱 t2 當前 count 值 3 當前執行緒...
執行緒基礎學習3
執行緒的狀態 等待和喚醒的機制 在多個執行緒之間通過等待方法和喚醒方法進行通訊,沒有被喚醒的話就一直等待。package threadtest void wait 導致當前執行緒等待,直到另乙個執行緒呼叫該物件的 notify 方法或notifyall 方法。void wait long timeo...