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

溫馨提示×

溫馨提示×

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

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

如何使用Java實現多線程切換等待喚醒交替打印奇偶數

發布時間:2021-09-27 09:50:53 來源:億速云 閱讀:107 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關如何使用Java實現多線程切換等待喚醒交替打印奇偶數的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

引言

在日常工作生活中,可能會有用時幾個人或是很多人干同一件事,在java編程中,同樣也會出現類似的情況,多個線程干同樣一個活兒,比如火車站買票系統不能多個人買一到的是同一張票,當某個窗口(線程)在賣某一張票的時候,別的窗口(線程)不允許再賣此張票了,在此過程中涉及到一個鎖和資源等待的問題,如何合理正確的讓線程與線程在干同一件事的過程中,不會搶資源以及一個一直等待一個一直干活的狀況,接下來就聊一下多線程的等待喚醒以及切換的過程,在此就以A和B兩個線程交替打印奇偶數的例子為例,代碼如下:

package com.svse.thread;import java.util.concurrent.atomic.AtomicInteger;/** * 交替打印奇偶數*功能說明: *@author:zsq *create date:2019年5月27日 下午4:34:30 *修改人 修改時間 修改描述* *Copyright (c)2019北京智華天成科技有限公司-版權所有*/public class AlternatePrinting {  //讓兩個線程使用同一把鎖。交替執行 。   //判斷是不是奇數 如果是奇數進入奇數線程執行打印并加一。然后線程釋放鎖資源。然后讓該線程等待   //判斷是不是偶數,如果是偶數進入偶數線程執行打印并加一。然后線程釋放鎖資源。然后讓該線程等待   public static AtomicInteger atomicInteger =new AtomicInteger(1);  public static void main(String[] args) {    Thread a=new Thread(new AThread());    Thread b=new Thread(new BThread());    a.start();    b.start();  }  //奇數線程   public static class AThread implements Runnable{    public void run() {      while(true){        synchronized (atomicInteger) {        if(atomicInteger.intValue()%2 !=0){          System.out.println("奇數線程:" + atomicInteger.intValue());          try {            Thread.sleep(500);          } catch (InterruptedException e1) {            // TODO Auto-generated catch block            e1.printStackTrace();          }          atomicInteger.getAndIncrement(); // 以原子方式將當前值加 1。           // 奇數線程釋放鎖資源           atomicInteger.notify();//執行完操作后釋放鎖并進入等待           try {            atomicInteger.wait();          } catch (InterruptedException e) {            e.printStackTrace();          }        }else{          // 奇數線程等待           try {            atomicInteger.wait();          } catch (InterruptedException e) {            // TODO Auto-generated catch block            e.printStackTrace();          }        }      }     }    }  }   //偶數線程   public static class BThread implements Runnable{    public void run() {      while(true){       synchronized (atomicInteger) {       if(atomicInteger.intValue()%2 ==0){          System.out.println("偶數線程:"+ atomicInteger.intValue());          try {            Thread.sleep(500);          } catch (InterruptedException e1) {            // TODO Auto-generated catch block            e1.printStackTrace();          }        atomicInteger.getAndIncrement(); // 以原子方式將當前值加 1。         // 偶數線程釋放鎖資源         atomicInteger.notify();//執行完操作后釋放鎖并進入等待         try {          atomicInteger.wait();        } catch (InterruptedException e) {          e.printStackTrace();        }      }else{        try {           // 偶數線程等待           atomicInteger.wait();        } catch (InterruptedException e) {          // TODO Auto-generated catch block          e.printStackTrace();        }       }     }    }  } }}

感謝各位的閱讀!關于“如何使用Java實現多線程切換等待喚醒交替打印奇偶數”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

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

AI

东辽县| 洛浦县| 阿瓦提县| 五寨县| 博客| 达州市| 胶州市| 涟水县| 南投市| 惠州市| 黄浦区| 绥江县| 古田县| 溆浦县| 藁城市| 莱阳市| 封开县| 都兰县| 稷山县| 陵川县| 长岭县| 晋州市| 河北省| 正镶白旗| 巨野县| 化州市| 陇南市| 吴堡县| 嘉黎县| 谢通门县| 德江县| 万载县| 隆林| 固原市| 越西县| 荥阳市| 库伦旗| 南丹县| 延津县| 庄浪县| 永吉县|