溫馨提示×

溫馨提示×

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

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

Java怎么實現(xiàn)多線程切換等待喚醒交替打印奇偶數(shù)

發(fā)布時間:2021-05-21 10:17:11 來源:億速云 閱讀:151 作者:小新 欄目:編程語言

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

引言

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

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

 效果如下:

Java怎么實現(xiàn)多線程切換等待喚醒交替打印奇偶數(shù)

Java的特點有哪些

Java的特點有哪些 1.Java語言作為靜態(tài)面向?qū)ο缶幊陶Z言的代表,實現(xiàn)了面向?qū)ο罄碚?,允許程序員以優(yōu)雅的思維方式進(jìn)行復(fù)雜的編程。 2.Java具有簡單性、面向?qū)ο蟆⒎植际?、安全性、平臺獨立與可移植性、動態(tài)性等特點。 3.使用Java可以編寫桌面應(yīng)用程序、Web應(yīng)用程序、分布式系統(tǒng)和嵌入式系統(tǒng)應(yīng)用程序等。

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

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI