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

Java多線程實(shí)戰(zhàn)之交叉打印的兩種方法

 更新時(shí)間:2019年02月11日 16:28:52   作者:邋遢的流浪劍客  
今天小編就為大家分享一篇關(guān)于Java多線程實(shí)戰(zhàn)之交叉打印的兩種方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧

要求效果:先打印5次“printA…”,再打印5次“printB…”,每次打印間隔1秒,重復(fù)循環(huán)20次

方式一:使用wait()和notifyAll()方法

public class MyService {
 private volatile boolean flag = false;
 public synchronized void printA() {
 try {
  while (flag) {
  wait();
  }
  for (int i = 0; i < 5; i++) {
  System.out.println("printA...");
  TimeUnit.SECONDS.sleep(1);
  }
  flag = true;
  notifyAll();
 } catch (InterruptedException e) {
  e.printStackTrace();
 }
 }
 public synchronized void printB() {
 try {
  while (!flag) {
  wait();
  }
  for (int i = 0; i < 5; i++) {
  System.out.println("printB...");
  TimeUnit.SECONDS.sleep(1);
  }
  flag = false;
  notifyAll();
 } catch (InterruptedException e) {
  e.printStackTrace();
 }
 }
}
public class BackupA implements Runnable {
 private MyService myService;
 public BackupA(MyService myService) {
 super();
 this.myService = myService;
 }
 @Override
 public void run() {
 myService.printA();
 }
}
public class BackupB implements Runnable {
 private MyService myService;
 public BackupB(MyService myService) {
 super();
 this.myService = myService;
 }
 @Override
 public void run() {
 myService.printB();
 }
}
public class Run {
 public static void main(String[] args) {
 MyService myService = new MyService();
 for (int i = 0; i < 20; i++) {
  new Thread(new BackupA(myService)).start();
  new Thread(new BackupB(myService)).start();
 }
 }
}

方式二:使用await()和signalAll()方法

public class MyService {
 private Lock lock = new ReentrantLock();
 private Condition condition = lock.newCondition();
 private boolean flag = false;
 public void printA() {
 try {
  lock.lock();
  while (flag) {
  condition.await();
  }
  for (int i = 0; i < 5; i++) {
  System.out.println("printA...");
  TimeUnit.SECONDS.sleep(1);
  }
  flag = true;
  condition.signalAll();
 } catch (InterruptedException e) {
  e.printStackTrace();
 } finally {
  lock.unlock();
 }
 }
 public void printB() {
 try {
  lock.lock();
  while (!flag) {
  condition.await();
  }
  for (int i = 0; i < 5; i++) {
  System.out.println("printB...");
  TimeUnit.SECONDS.sleep(1);
  }
  flag = false;
  condition.signalAll();
 } catch (InterruptedException e) {
  e.printStackTrace();
 } finally {
  lock.unlock();
 }
 }
}
public class ThreadA implements Runnable {
 private MyService myService;
 public ThreadA(MyService myService) {
 super();
 this.myService = myService;
 }
 @Override
 public void run() {
 myService.printA();
 }
}
public class ThreadB implements Runnable {
 private MyService myService;
 public ThreadB(MyService myService) {
 super();
 this.myService = myService;
 }
 @Override
 public void run() {
 myService.printB();
 }
}
public class Run {
 public static void main(String[] args) {
 MyService myService = new MyService();
 for (int i = 0; i < 20; i++) {
  new Thread(new ThreadA(myService)).start();
  new Thread(new ThreadB(myService)).start();
 }
 }
}

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

  • spring boot利用docker構(gòu)建gradle項(xiàng)目的實(shí)現(xiàn)步驟

    spring boot利用docker構(gòu)建gradle項(xiàng)目的實(shí)現(xiàn)步驟

    這篇文章主要給大家介紹了關(guān)于spring boot利用docker構(gòu)建gradle項(xiàng)目的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用spring boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-05-05
  • Java實(shí)現(xiàn)順序表的操作詳解

    Java實(shí)現(xiàn)順序表的操作詳解

    順序表是用一段物理地址連續(xù)的存儲(chǔ)單元依次存儲(chǔ)數(shù)據(jù)元素的線性結(jié)構(gòu),一般情況下采用數(shù)組存儲(chǔ)。本文主要介紹了順序表的實(shí)現(xiàn)與常用操作,需要的可以參考一下
    2022-09-09
  • Java數(shù)據(jù)結(jié)構(gòu)篇之實(shí)現(xiàn)二叉搜索樹的核心方法

    Java數(shù)據(jù)結(jié)構(gòu)篇之實(shí)現(xiàn)二叉搜索樹的核心方法

    二叉搜索樹是一種常用的數(shù)據(jù)結(jié)構(gòu),它是一棵二叉樹,且每個(gè)節(jié)點(diǎn)的值都大于其左子樹中任何節(jié)點(diǎn)的值,而小于其右子樹中任何節(jié)點(diǎn)的值,這篇文章主要給大家介紹了關(guān)于Java數(shù)據(jù)結(jié)構(gòu)篇之實(shí)現(xiàn)二叉搜索樹的核心方法,需要的朋友可以參考下
    2023-12-12
  • Java深入講解Bean作用域與生命周期

    Java深入講解Bean作用域與生命周期

    這篇文章主要介紹了淺談Spring中Bean的作用域和生命周期,從創(chuàng)建到消亡的完整過程,例如人從出生到死亡的整個(gè)過程就是一個(gè)生命周期。本文將通過示例為大家詳細(xì)講講,感興趣的可以學(xué)習(xí)一下
    2022-06-06
  • Java代碼實(shí)現(xiàn)四種限流算法詳細(xì)介紹

    Java代碼實(shí)現(xiàn)四種限流算法詳細(xì)介紹

    本文主要介紹了Java代碼實(shí)現(xiàn)四種限流算法詳細(xì)介紹,包含固定窗口限流,滑動(dòng)窗口限流,漏桶限流,令牌桶限流,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-05-05
  • java中Servlet處理亂碼的方法

    java中Servlet處理亂碼的方法

    java中Servlet處理亂碼的方法,需要的朋友可以參考一下
    2013-03-03
  • Java多線程中線程間的通信實(shí)例詳解

    Java多線程中線程間的通信實(shí)例詳解

    這篇文章主要介紹了Java多線程中線程間的通信實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Java棧的三種實(shí)現(xiàn)方式(完整版)

    Java棧的三種實(shí)現(xiàn)方式(完整版)

    這篇文章主要介紹了Java棧的三種實(shí)現(xiàn)方式(完整版),需要的朋友可以參考下
    2020-12-12
  • 解決poi導(dǎo)出時(shí)單元格樣式被覆蓋問題

    解決poi導(dǎo)出時(shí)單元格樣式被覆蓋問題

    這篇文章主要介紹了解決poi導(dǎo)出時(shí)單元格樣式被覆蓋問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • java中的常見幾種發(fā)送http請(qǐng)求實(shí)例

    java中的常見幾種發(fā)送http請(qǐng)求實(shí)例

    在Java編程中,發(fā)送HTTP請(qǐng)求是一個(gè)常見需求,常用的方法有四種:HttpURLConnection、URLConnection、HttpClient以及Socket,其中,使用HttpClient方式時(shí),需要添加額外的庫支持
    2024-11-11

最新評(píng)論

阿图什市| 石嘴山市| 鹿泉市| 黔东| 黔东| 冷水江市| 白玉县| 襄樊市| 武夷山市| 朝阳区| 水富县| 冷水江市| 和林格尔县| 清原| 重庆市| 阜阳市| 韶关市| 梨树县| 江达县| 滕州市| 神木县| 山西省| 铁岭市| 福清市| 常山县| 东兰县| 应城市| 凤翔县| 台北县| 花莲市| 威海市| 邢台县| 元阳县| 天全县| 澄江县| 革吉县| 洛浦县| 洪雅县| 宁乡县| 乌海市| 松溪县|