最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2019年05月29日 16:43:41   作者:zsq_fengchen  
這篇文章主要介紹了Java 實(shí)現(xiàn)多線程切換等待喚醒交替打印奇偶數(shù) ,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

引言

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

package com.svse.thread;
import java.util.concurrent.atomic.AtomicInteger;
/**
 * 交替打印奇偶數(shù)
*功能說(shuō)明:
 *@author:zsq
 *create date:2019年5月27日 下午4:34:30
 *修改人 修改時(shí)間 修改描述
*
 *Copyright (c)2019北京智華天成科技有限公司-版權(quán)所有
*/
public class AlternatePrinting {
  //讓兩個(gè)線程使用同一把鎖。交替執(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();
        }
       }
     }
    }
  }
 }
}

 效果如下:

總結(jié)

以上所述是小編給大家介紹的Java 實(shí)現(xiàn)多線程切換等待喚醒交替打印奇偶數(shù),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Java金額大小寫(xiě)的轉(zhuǎn)換方法

    Java金額大小寫(xiě)的轉(zhuǎn)換方法

    這篇文章主要為大家詳細(xì)介紹了Java金額大小寫(xiě)的轉(zhuǎn)換方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • spring注解@Import用法詳解

    spring注解@Import用法詳解

    這篇文章主要介紹了spring注解@Import用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Spring data jpa的使用與詳解(復(fù)雜動(dòng)態(tài)查詢及分頁(yè),排序)

    Spring data jpa的使用與詳解(復(fù)雜動(dòng)態(tài)查詢及分頁(yè),排序)

    這篇文章主要介紹了Spring data jpa的使用與詳解(復(fù)雜動(dòng)態(tài)查詢及分頁(yè),排序),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • springboot加載復(fù)雜的yml文件獲取不到值的解決方案

    springboot加載復(fù)雜的yml文件獲取不到值的解決方案

    這篇文章主要介紹了springboot加載復(fù)雜的yml文件獲取不到值的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java字節(jié)流 從文件輸入輸出到文件過(guò)程解析

    Java字節(jié)流 從文件輸入輸出到文件過(guò)程解析

    這篇文章主要介紹了Java字節(jié)流 從文件輸入 輸出到文件過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 23種設(shè)計(jì)模式(9) java橋接模式

    23種設(shè)計(jì)模式(9) java橋接模式

    這篇文章主要為大家詳細(xì)介紹了java設(shè)計(jì)模式之橋接模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Java使用Catcher捕獲異常的實(shí)現(xiàn)

    Java使用Catcher捕獲異常的實(shí)現(xiàn)

    本文主要介紹了Java使用Catcher捕獲異常的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • linux下用renameTo方法修改java web項(xiàng)目中文件夾名稱(chēng)的實(shí)例

    linux下用renameTo方法修改java web項(xiàng)目中文件夾名稱(chēng)的實(shí)例

    下面小編就為大家?guī)?lái)一篇linux下用renameTo方法修改java web項(xiàng)目中文件夾名稱(chēng)的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • GsonFormat快速生成JSon實(shí)體類(lèi)的實(shí)現(xiàn)

    GsonFormat快速生成JSon實(shí)體類(lèi)的實(shí)現(xiàn)

    GsonFormat主要用于使用Gson庫(kù)將JSONObject格式的String?解析成實(shí)體,本文主要介紹了GsonFormat快速生成JSon實(shí)體類(lèi)的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-05-05
  • 淺談java中為什么實(shí)體類(lèi)需要實(shí)現(xiàn)序列化

    淺談java中為什么實(shí)體類(lèi)需要實(shí)現(xiàn)序列化

    下面小編就為大家?guī)?lái)一篇淺談java中為什么實(shí)體類(lèi)需要實(shí)現(xiàn)序列化。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05

最新評(píng)論

启东市| 阳新县| 清水河县| 九龙县| 罗定市| 巴马| 泾源县| 吴旗县| 拉萨市| 阳新县| 德安县| 罗城| 海盐县| 平安县| 天台县| 修水县| 姚安县| 任丘市| 永德县| 松江区| 奉新县| 鲁甸县| 汝城县| 宝丰县| 长泰县| 二连浩特市| 县级市| 高台县| 沂水县| 枣庄市| 桐乡市| 宁河县| 迁安市| 达孜县| 社旗县| 高邑县| 五指山市| 论坛| 根河市| 嘉禾县| 重庆市|