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

java實(shí)現(xiàn)兩個(gè)線程交替打印的實(shí)例代碼

 更新時(shí)間:2019年12月25日 08:45:58   作者:V  
在本篇文章里小編給大家整理的是一篇關(guān)于java實(shí)現(xiàn)兩個(gè)線程交替打印的相關(guān)知識(shí)點(diǎn)內(nèi)容,有需要的朋友們參考下。

使用ReentrantLock實(shí)現(xiàn)兩個(gè)線程交替打印

實(shí)現(xiàn)字母在前數(shù)字在后

package com.study.pattern;

 

import java.util.concurrent.CountDownLatch;

import java.util.concurrent.locks.Condition;

import java.util.concurrent.locks.Lock;

import java.util.concurrent.locks.ReentrantLock;

 

public class Demo2 {

 private static Lock lock = new ReentrantLock();

 private static Condition c1 = lock.newCondition();

 private static Condition c2 = lock.newCondition();

 private static CountDownLatch count = new CountDownLatch(1);

 public static void main(String[] args) {

  String c = "ABCDEFGHI";

  char[] ca = c.toCharArray();

  String n = "123456789";

  char[] na = n.toCharArray();

  Thread t1 = new Thread(() -> {

   try {

    lock.lock();

    count.countDown();

    for(char caa : ca) {

     c1.signal();

     System.out.print(caa);

     c2.await();

    }

    c1.signal();

   } catch (InterruptedException e) {

    e.printStackTrace();

   } finally {

    lock.unlock();

   }

  });

  Thread t2 = new Thread(() -> {

   try {

    count.await();

    lock.lock();

    for(char naa : na) {

     c2.signal();

     System.out.print(naa);

     c1.await();

    }

    c2.signal();

   } catch (InterruptedException e) {

    e.printStackTrace();

   } finally {

    lock.unlock();

   }

  });

  t1.start();

  t2.start();

 }

}

最后輸出結(jié)果:

使用LinkedTransferQueue實(shí)現(xiàn)兩個(gè)線程交替打印

實(shí)現(xiàn)字母在前數(shù)字在后

package com.study.pattern;

 

 

import java.util.concurrent.LinkedTransferQueue;

 

public class Demo3 {

 private static LinkedTransferQueue<Character> linkedC = new LinkedTransferQueue<Character>();

 private static LinkedTransferQueue<Character> linkedN = new LinkedTransferQueue<Character>();

 public static void main(String[] args) {

  String c = "ABCDEFGHI";

  char[] ca = c.toCharArray();

  String n = "123456789";

  char[] na = n.toCharArray();

  Thread t1 = new Thread(() -> {

   for(char caa : ca) {

    try {

     linkedC.put(caa);

     char a = linkedN.take();

     System.out.print(a);

    } catch (InterruptedException e) {

     e.printStackTrace();

    }

   }

  });

  Thread t2 = new Thread(() -> {

   for(char naa : na) {

    try {

     char b = linkedC.take();

     System.out.print(b);

     linkedN.put(naa);

    } catch (InterruptedException e) {

     e.printStackTrace();

    }

   }

  });

  t1.start();

  t2.start();

 

 }

}

輸出結(jié)果:

使用synchronized實(shí)現(xiàn)兩個(gè)線程交替打印

實(shí)現(xiàn)字母在前數(shù)字在后

package com.study.pattern;

 

 

import java.util.concurrent.CountDownLatch;

 

public class Demo4 {

 private static CountDownLatch count = new CountDownLatch(1);

 public static void main(String[] args) {

  String c = "ABCDEFGHI";

  char[] ca = c.toCharArray();

  String n = "123456789";

  char[] na = n.toCharArray();

  Object lock = new Object();

  Thread t1 = new Thread(() -> {

   synchronized (lock) {

    count.countDown();

    for(char caa : ca) {

     System.out.print(caa);

     lock.notify();

     try {

      lock.wait();

     } catch (InterruptedException e) {

      e.printStackTrace();

     }

    }

    lock.notify();

   }

  });

  Thread t2 = new Thread(() -> {

   try {

    count.await();

   } catch (InterruptedException e) {

    e.printStackTrace();

   }

   synchronized (lock) {

    for(char naa : na) {

     System.out.print(naa);

     lock.notify();

     try {

      lock.wait();

     } catch (InterruptedException e) {

      e.printStackTrace();

     }

    }

    lock.notify();

   }

  });

  t1.start();

  t2.start();

 }

}

輸出結(jié)果:

使用LockSupport實(shí)現(xiàn)兩個(gè)線程交替打印

實(shí)現(xiàn)字母在前數(shù)字在后

package com.study.pattern;

 

 

import java.util.concurrent.locks.LockSupport;

 

public class Demo5 {

 private static Thread t1;

 private static Thread t2;

 public static void main(String[] args) {

  String c = "ABCDEFGHI";

  char[] ca = c.toCharArray();

  String n = "123456789";

  char[] na = n.toCharArray();

  t1 = new Thread(() -> {

   for(char caa : ca) {

    System.out.print(caa);

    LockSupport.unpark(t2);

    LockSupport.park();

 

   }

  });

  t2 = new Thread(() -> {

   for(char naa : na) {

    LockSupport.park();

    System.out.print(naa);

    LockSupport.unpark(t1);

   }

  });

  t1.start();

  t2.start();

 }

}

輸出結(jié)果:

以上就是java實(shí)現(xiàn)兩個(gè)線程交替打印的詳細(xì)內(nèi)容,感謝大家的學(xué)習(xí)和對腳本之家的支持。

相關(guān)文章

  • Java使用迭代器Iterator遍歷集合

    Java使用迭代器Iterator遍歷集合

    Iterator對象稱為迭代器(設(shè)計(jì)模式的一種),主要用于遍歷 Collection 集合中的元素。本文就來和大家詳細(xì)聊聊Java如何使用迭代器Iterator實(shí)現(xiàn)遍歷集合,感興趣的可以跟隨小編一起學(xué)習(xí)一下
    2022-12-12
  • SpringBoot 集成 ShedLock 分布式鎖的示例詳解

    SpringBoot 集成 ShedLock 分布式鎖的示例詳解

    ShedLock是一個(gè)在分布式環(huán)境中使用的定時(shí)任務(wù)框架,用于解決在分布式環(huán)境中的多個(gè)實(shí)例的相同定時(shí)任務(wù)在同一時(shí)間點(diǎn)重復(fù)執(zhí)行的問題,本文重點(diǎn)給大家介紹SpringBoot 分布式鎖ShedLock的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2021-08-08
  • Java客戶端通過HTTPS連接到Easysearch實(shí)現(xiàn)過程

    Java客戶端通過HTTPS連接到Easysearch實(shí)現(xiàn)過程

    這篇文章主要為大家介紹了Java客戶端通過HTTPS連接到Easysearch實(shí)現(xiàn)過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Spring相關(guān)知識(shí)點(diǎn)的總結(jié)與梳理

    Spring相關(guān)知識(shí)點(diǎn)的總結(jié)與梳理

    今天小編就為大家分享一篇關(guān)于Spring相關(guān)知識(shí)點(diǎn)的總結(jié)與梳理,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • 歸并排序時(shí)間復(fù)雜度過程推導(dǎo)詳解

    歸并排序時(shí)間復(fù)雜度過程推導(dǎo)詳解

    這篇文章主要介紹了C語言實(shí)現(xiàn)排序算法之歸并排序,對歸并排序的原理及實(shí)現(xiàn)過程做了非常詳細(xì)的解讀,需要的朋友可以參考下,希望能幫助到你
    2021-08-08
  • Java中方法的重載與重寫舉例比較

    Java中方法的重載與重寫舉例比較

    這篇文章主要給大家介紹了關(guān)于Java中方法的重載與重寫的相關(guān)資料,Java中的方法重載和重寫是面向?qū)ο缶幊讨械膬蓚€(gè)重要概念,文中介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • 淺析Java中對稱與非對稱加密算法原理與使用

    淺析Java中對稱與非對稱加密算法原理與使用

    密碼學(xué)是研究編制密碼和破譯密碼的技術(shù)科學(xué)。這篇文章主要為大家介紹了Java中對稱與非對稱加密算法的原理與使用,感興趣的小伙伴可以了解一下
    2023-03-03
  • Spring請求傳遞參數(shù)的解決方案

    Spring請求傳遞參數(shù)的解決方案

    訪問不同的路徑,就是發(fā)送不同的請求.在發(fā)送請求時(shí),可能會(huì)帶?些參數(shù),所以我們在學(xué)習(xí)Spring的請求時(shí),主要是學(xué)習(xí)如何傳遞參數(shù)到后端以及后端如何接收,下面給大家講解?Spring請求傳遞參數(shù)詳解,一起看看吧
    2024-01-01
  • SWT(JFace)體驗(yàn)之StackLayout布局

    SWT(JFace)體驗(yàn)之StackLayout布局

    SWT(JFace)體驗(yàn)之StackLayout布局實(shí)現(xiàn)代碼。
    2009-06-06
  • 基于BIO的Java Socket通信詳解

    基于BIO的Java Socket通信詳解

    這篇文章主要為大家詳細(xì)介紹了基于BIO的Java Socket通信相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12

最新評論

德令哈市| 博客| 安顺市| 抚州市| 沁阳市| 金川县| 崇州市| 绍兴市| 屯留县| 天水市| 个旧市| 黄山市| 吐鲁番市| 永清县| 锡林浩特市| 沾益县| 高淳县| 舟山市| 襄垣县| 丹凤县| 二连浩特市| 宜君县| 桂东县| 石家庄市| 石屏县| 高密市| 益阳市| 昂仁县| 盘锦市| 绥芬河市| 宝应县| 屯留县| 双鸭山市| 襄汾县| 江都市| 开远市| 玉溪市| 梁平县| 河南省| 宁都县| 伽师县|