簡體   English   中英

java監視器-隊列

[英]java monitor - queues

我有一個 java 監視器,但我需要一些解釋:

class Test
{
  private int data;
  private boolean full = false;

  public synchronized int receive() {
    while (!full) wait();
    full = false;
    return data;
  }

  public synchronized void send(int value) {
    data = value;
    full = true;
    notify();
  }
}

我知道,監視器內只能有一個正在運行的進程,所以我不明白以下幾點:

  • 監視器究竟是什么? 整個類還是兩個同步方法?
  • 有多少個等待線程隊列? 整個班級只有一個還是每個同步方法一個?
  • 如果監視器是整個類,如果在類的定義中沒有類似監視器的關鍵字,Java如何將其識別為監視器?

在您發布的代碼的情況下,由於方法不是靜態方法,因此監視器與對象相關聯,而不是與類相關聯:類的每個實例都有一個這樣的監視器。

此類的每個實例都有一個等待線程隊列。 隊列適用於這兩種同步方法,因此如果一個線程正在執行其中一種方法,則其他線程無法執行其中任何一種方法。

Java 中的每個對象和每個類都有自己的內置監視器。 對象監視器適用於非靜態方法,類監視器適用於靜態方法。 監視器是語言定義的一部分,不必顯式聲明或定義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM