国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

如何使用Java實(shí)現多線(xiàn)程切換等待喚醒交替打印奇

發(fā)布時(shí)間:2021-09-27 17:50 來(lái)源:億速云 閱讀:0 作者:小新 欄目: 開(kāi)發(fā)技術(shù)

這篇文章給大家分享的是有關(guān)如何使用Java實(shí)現多線(xiàn)程切換等待喚醒交替打印奇偶數的內容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

引言

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

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

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。

亚洲AV无码一区二区三区网站| 欧美交换配乱吟粗大25P| 2020国产精品久久精品| 欧美老妇毛茸茸二毛| 免费观看电视在线高清| 精品一区二区国产在线观看|