併發程式設計之wait方法的理解

2021-08-13 10:24:01 字數 707 閱讀 3533

wait方法一般這麼用:

例項一、public static void main(string args)

}catch(....)

}例項二、

@override

public void run()

}catch(....)

}例項三、

public final synchronized void join(long millis)

方法wait()方法不只屬於thread類,它是object類的方法,所有任何類都有這個方法,它的作用是使當前執行**的執行緒進入等待(注意是執行wait方法的**,如例項一會使main執行緒進入等待,例項二會使應用這個run方法的執行緒進入等待),當前執行**的執行緒就會置入「預執行佇列」中(知道有人喚醒它才會進入執行佇列),並且**會停止在wait()方法所在的**行處,並且重新喚醒後才具有執行權力,當cpu真正排程時才能執行並且執行是從停止處的下一行開始執行。應為wait方法是讓執行該出**的執行緒進入阻塞,所以怎麼呼叫這個wait方法無所謂,只要在執行的**裡呼叫了即可,所有可以有任何物件來呼叫這個wait方法,但在呼叫wait方法之前要先獲取這個物件的物件級別的鎖(如例項一和例項二都是定義了乙個類物件,例項三是拿到的join方法所屬的這個執行緒物件的鎖),所以只能在同步方法或同步**塊中呼叫wait方法,且執行wait方法後當前執行緒會釋放對應的物件級鎖;在重新執行wait下面**之前該執行緒要與其它執行緒重新獲得鎖才能再次執行;

併發程式設計之併發佇列

jdk 中提供了一系列場景的併發安全佇列。總的來說,按照實現方式的不同可分為阻塞佇列和非阻塞佇列,前者使用鎖實現,而後者則使用cas 非阻塞演算法實現。1 非阻塞佇列 concurrentlinkedqueue concurrentlinkedqueue是無界非阻塞佇列,內部使用單項鍊表實現 其中有...

併發程式設計之深入理解Lock介面

寫乙個執行緒不安全的 public class unsafethread public static void main string args catch interruptedexception e countdownlatch.countdown start while true 這裡的cou...

併發程式設計之AtomicReference

此類屬於原子並發包,可以對引用型別進行原子無鎖操作 構造方法 保證可見性和禁止指令重排序 private volatile v value 用給定的物件創造乙個引用原子型別 param initialvalue the initial value public atomicreference v i...