1. 程式人生 > >執行緒流程以及wait notify notifyAll用法

執行緒流程以及wait notify notifyAll用法

執行緒是為了讓我們更好的利用cpu或者滿足需要時候採用的技術。現在來了解一下整個執行緒的流程。

這張圖很好的解釋了整個執行緒的生命週期。

來說一下執行緒的各個狀態:

initialization一個執行緒在new之後就會向作業系統申請資源。然後完成初始化等操作。

waitting:我們用到訊號機制實現同步時,人為呼叫執行緒的wait()方法,會進入waitting態。或者呼叫該執行緒的join

方法,其他沒有start的執行緒會進入waiting態。

Timedwaitting:當執行緒呼叫sleep之後就會進入Timedwaitting狀態。這時候執行緒是佔用cpu的,比如某個執行緒呼叫

sleep(1000),這時候作業系統為了保證他一秒之後能準確執行,允許他佔用cpu。並且這個執行緒如果獲得了鎖,

呼叫sleep並不會釋放鎖。這樣執行緒沉睡了一秒之後還能繼續原來的地方準確執行。

blocking:當執行緒訪問有鎖的共享資源的時候,如果競爭失敗,這個執行緒就會阻塞自己,進入blocked狀態。

waiting態被喚醒的執行緒競爭資源失敗也會進入blocked態

runnable:當執行緒訪問不帶鎖的共享資源,或者獲得了帶鎖的資源。這時候就會start()並且執行。

Terminated:執行緒執行結束,回收申請的資源

總結wait,notify,notifyAll:

執行緒的wait方法和notify(nofifyAll)方法是配合使用的。一個執行緒競爭資源失敗後進入呼叫wait進入waitting態。或者

競爭資源失敗進入blocked態。然後我們呼叫notify方法喚醒其中的一個執行緒(喚醒的執行緒是作業系統通過對多執行緒的

排程來決定喚醒哪個執行緒)。或者呼叫notifyAll喚醒所有的執行緒。被喚醒的執行緒去競爭鎖。競爭到的執行,競爭不到的

進入blocked態。如果我們不可以的去寫wait和notify,只是用了synchronized上鎖之後,作業系統是幫我們呼叫這些

方法的。

相關推薦

執行流程以及wait notify notifyAll用法

執行緒是為了讓我們更好的利用cpu或者滿足需要時候採用的技術。現在來了解一下整個執行緒的流程。 這張圖很好的解釋了整個執行緒的生命週期。 來說一下執行緒的各個狀態: initialization:一個執行緒在new之後就會向作業系統申請資源。然後完成初始化

java執行安全之wait/notify模擬Queue (九)

概念理解       BlockingQueue:顧名思義,首先他是一個佇列,並且支援阻塞的機制,阻塞的放入和得到資料。我們要實現LinkedBlockingQueue下面兩個簡單的方法put和take。      put(anObject):把anObje

java.util.concurrent包(3)-執行間通訊wait/notify和await/signal

1 wait和notify 當呼叫wait()方法時執行緒會放棄物件鎖,進入等待此物件的等待鎖定池,只有針對此物件呼叫notify()方法後本執行緒才進入物件鎖定池準備 Object的方法:void notify(): 喚醒一個正在等待該物件的執行緒。void noti

Java多執行中的wait/notify通訊模式

前言   最近在看一些JUC下的原始碼,更加意識到想要學好Java多執行緒,基礎是關鍵,比如想要學好ReentranLock原始碼,就得掌握好AQS原始碼,而AQS原始碼中又有很多Java多執行緒經典的一些應用;再比如看了執行緒池的核心原始碼實現,又學到了很多核心實現,其實這些都可以提出來慢慢消化並變成自己

JAVA執行間協作waitnotifynotifyAll、sleep用途

在上節中,介紹了java多執行緒中同步鎖的概念,synchronized方法和synchronized程式碼塊都是為了解決執行緒併發的問題,同一時間允許一個執行緒訪問當前類或者物件。如果涉及到執行緒間的協作通訊,就需要用到wait、notify、notifyAll方法,這三個方法是Object的

Java併發程式設計(10):使用wait/notify/notifyAll實現執行間通訊的幾點重要說明

在Java中,可以通過配合呼叫Object物件的wait()方法和notify()方法或notifyAll()方法來實現執行緒間的通訊。線上程中呼叫wait()方法,將阻塞等待其他執行緒的通知(其他執行緒呼叫notify()方法或notifyAll()方法),線上程中呼叫notify()方法或notifyAl

#Java多執行知識點總結waitnotifynotifyAll

Java多執行緒 設計一個典型的場景,來闡述wait()、notify()、notifyAll(),生產消費者。 有生產者、消費者、緩衝佇列(size=10)。 生產者不停地向緩衝佇列裡放資料,一旦佇列滿了,則wait(),並notify()消費者進行處理。 消費者不停地從緩衝佇列裡

Java多執行學習之waitnotify/notifyAll 詳解

轉載 https://www.cnblogs.com/moongeek/p/7631447.html 1、wait()、notify/notifyAll() 方法是Object的本地final方法,無法被重寫。 2、wait()使當前執行緒阻塞,前提是 必須先獲

Java 執行的通訊 wait() 與 notify() 和 notifyAll()的使用

@[toc](Java 執行緒的通訊 wait() 與 notify() 和 notifyAll()的使用) 1. 執行緒通訊 wait() 與 notify() 和 notifyAll() ① wait():令當前執行緒掛起並放棄CPU、同步資源,使別的執行緒可訪問並修

-1-5 java 多執行緒 概念 程序 執行緒區別聯絡 java建立執行緒方式 執行緒執行緒池概念 執行緒安全 同步 同步程式碼塊 Lock鎖 sleep()和wait()方法的區別 為什麼wait(),notify(),notifyAll()等方法都定義在O

 本文關鍵詞: java 多執行緒 概念 程序 執行緒區別聯絡 java建立執行緒方式 執行緒組 執行緒池概念 執行緒安全 同步 同步程式碼塊 Lock鎖  sleep()和wait()方法的區別 為什麼wait(),notify(),notifyAll()等方法都定義在Object類中 多執行緒

wait(),notify(),notifyAll()用來操作執行為什麼定義在Object類中?wait(),sleep()區別?

wait(),notify(),notifyAll()用來操作執行緒為什麼定義在Object類中? 這些方法存在於同步中; 使用這些方法必須標識同步所屬的鎖; 鎖可以是任意物件,所以任意物件呼叫方法一定定義在Object類中。 wait(),sleep(

【Java併發程式設計】之十:使用wait/notify/notifyAll實現執行間通訊的幾點重要說明

在Java中,可以通過配合呼叫Object物件的wait()方法和notify()方法或notifyAll()方法來實現執行緒間的通訊。線上程中呼叫wait()方法,將阻塞等待其他執行緒的通知(其

wait,notify,notifyAll,sleep這些方法都跟執行的狀態變化有關,為什麼jdk把前三個方法放在Object類裡面,而把sleep放在Thread類裡面?

首先,雖然這些方法都跟執行緒的狀態變化有關,但wait(),notify(),notifyAll()這三個方法在用法上就跟sleep()方法不太一樣,wait(),notify(),notifyAll()必須在sychronized同步程式碼塊中使用,且要用當前執行緒持有的鎖

Java執行狀態以及 sheep()、wait()、yield() 的區別

前言 最近看到很多人都在討論多執行緒的問題,於是寫出了這篇部落格,希望可以幫到正在學習和使用這塊的朋友們,首先我們先看看兩個圖(兩個圖都來自其他碼農的分享)。   這兩個圖是一樣的邏輯,這裡一起羅列出來,下面讓我們用語句來簡單描述下兩個圖: sleep 讓執行緒從 【run

執行中sleep() wait() yield() join(), interrupt(),stop(),suspend()用法與區別

網上卻是有很多的關於這個的答案,但是都長得一樣,為了寫這篇部落格,自己找了幾個例子。 JoinThread: package com.com.aaa.threadJoinDemo; public c

執行同步中wait()和notify()的使用(用生產者消費者模式解釋)

wait()和notify()是什麼 雖然我們一般在多執行緒中使用wait和notify的方法,但其實它們是不屬於Thread類的,他們是Object類中的方法,我們先來看一下API中的解釋: 1、notify():喚醒在此物件監視器上等待的單個執行緒。 2、n

執行中sleep() wait() yield() join(), interrupt(),stop(),suspend(),setPriority()用法與區別

網上卻是有很多的關於這個的答案,但是都長得一樣,為了寫這篇部落格,自己找了幾個例子。 JoinThread: package com.com.aaa.threadJoinDemo; public class JoinThread extends Thread{ publ

執行通訊(waitnotify

        import java.util.ArrayList; import java.util.List; public class ListAdd1 { private volatile static List list = new

Java多執行之 使用waitnotify實現生產者消費者模型

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

執行中的wait()和notify()方法

wait()和notify()方法屬於Object類中的方法,是用於對執行緒之間進行資源物件鎖的通訊,其必須在synchronized(Obj){...}語法塊內 wait()就是說執行緒在獲取物件鎖後,主動釋放物件鎖,同時本執行緒進行休眠。直到有其它執行緒呼叫該物件的no