91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行Java多線程語句具體分類的分析

發布時間:2021-11-20 17:50:39 來源:億速云 閱讀:130 作者:柒染 欄目:編程語言

如何進行Java多線程語句具體分類的分析,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

在Java多線程語句中有很多的小的語句需要我們特殊的注意。wait(),notify(),notifyAll()不屬于Thread類,下面我們就來詳細的看看如何使用這幾個分類代碼。希望大家有所收獲。

而是屬于Object基礎類,也就是說每個對像都有wait(),notify(),notifyAll()的功能.因為都個對像都有鎖,鎖是每個對像的基礎,當然操作鎖的方法也是最基礎了.先看java doc怎么說:

Java多線程語句中,wait導致當前的線程等待,直到其他線程調用此對象的 notify() 方法或 notifyAll() 方法。當前的線程必須擁有此對象監視器。該線程發布對此監視器的所有權并等待,直到其他線程通過調用 notify 方法,或 notifyAll 方法通知在此對象的監視器上等待的線程醒來。然后該線程將等到重新獲得對監視器的所有權后才能繼續執行.

notify喚醒在此對象監視器上等待的單個線程。如果所有線程都在此對象上等待,則會選擇喚醒其中一個線程。直到當前的線程放棄此對象上的鎖定,才能繼續執行被喚醒的線程。此方法只應由作為此對象監視器的所有者的線程來調用.

"當前的線程必須擁有此對象監視器"與"此方法只應由作為此對象監視器的所有者的線程來調用"說明wait方法與notify方法必須在同步塊內執行,即synchronized(obj之內).

調用對像wait方法后,當前線程釋放對像鎖,進入等待狀態.直到其他線程(也只能是其他線程)通過notify 方法,或 notifyAll.該線程重新獲得對像鎖。繼續執行,記得線程必須重新獲得對像鎖才能繼續執行.因為synchronized代碼塊內沒有鎖是寸步不能走的.看一個很經典的例子:

Code  package ProductAndConsume;  import java.util.List;  public class Consume implements Runnable{  private List container = null;  private int count;  public Consume(List lst){  this.container = lst;  }  public void run() {  while(true){  synchronized (container) {  if(container.size()== 0){  try {  container.wait();//放棄鎖  } catch (InterruptedException e) {  e.printStackTrace();  }  }  try {  Thread.sleep(100);  } catch (InterruptedException e) {  // TODO Auto-generated catch block  e.printStackTrace();  }  container.remove(0);  container.notify();  System.out.println("我吃了"+(++count)+"個");  }  }  }  }  package ProductAndConsume;  import java.util.List;  public class Product implements Runnable {  private List container = null;  private int count;  public Product(List lst) {  this.container = lst;  }  public void run() {  while (true) {  synchronized (container) {  if (container.size() > MultiThread.MAX) {  try {  container.wait();  } catch (InterruptedException e) {  e.printStackTrace();  }  }  try {  Thread.sleep(100);  } catch (InterruptedException e) {  e.printStackTrace();  }  container.add(new Object());  container.notify();  System.out.println("我生產了"+(++count)+"個");  }  }  }  }  package ProductAndConsume;  imort java.util.ArrayList;  import java.util.List;  public class MultiThread {  private List container = new ArrayList();  public final static int MAX = 5;  public static void main(String args[]){  MultiThread m = new MultiThread();  new Thread(new Consume(m.getContainer())).start();  new Thread(new Product(m.getContainer())).start();  new Thread(new Consume(m.getContainer())).start();  new Thread(new Product(m.getContainer())).start();  }  public List getContainer() {  return container;  }  public void setContainer(List container) {  this.container = container;  }

關于如何進行Java多線程語句具體分類的分析問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

涡阳县| 呈贡县| 晋州市| 炉霍县| 天气| 焦作市| 南漳县| 芜湖县| 荥阳市| 伊宁县| 万载县| 镇坪县| 高陵县| 文水县| 遂平县| 抚州市| 锡林郭勒盟| 高州市| 商水县| 赣州市| 临潭县| 大余县| 本溪| 交城县| 科尔| 甘孜县| 江阴市| 林西县| 巴塘县| 温州市| 观塘区| 永平县| 德惠市| 尼木县| 昌江| 荆州市| 白银市| 永德县| 香河县| 永定县| 水富县|