JUC之分别打印A,B,C

JUC之分别打印A,B,C

线程的并发编程:

什么是juc: juc是java.util.concurrent下的类包,专门用于多线程的处理。

并发编程的本质目的就是为了充分发挥出CPU的计算能力。

上代码分析:

要求:一个程序,开启3个线程,线程id分别为A, B, C, 使这3个线程按顺序执行,运行次数自定。

/** * 要求:一个程序,开启3个线程,线程id分别为A, B, C, 使这3个线程按顺序执行,运行次数自定。 */public class TestABCAlternate { public static void main(String[] args) {  ConcurrentDemo ad = new ConcurrentDemo();  new Thread(new Runnable() {   @Override   public void run() {    for (int i = 0; i < 5; i++) {     ad.loopA(i);    }   }  }, "A").start();  new Thread(new Runnable() {   @Override   public void run() {    for (int i = 0; i < 5; i++) {     ad.loopB(i);    }   }  }, "B").start();  new Thread(new Runnable() {   @Override   public void run() {    for (int i = 0; i < 5; i++) {     ad.loopC(i);     System.out.println("-----------------------");    }   }  }, "C").start(); }}class ConcurrentDemo { private int flag = 1;//当前正在执行线程的标记 /* * 实例化ReentrantLock对象(可重入,可中断,公平锁)等特点 * 可重入:能够对共享资源能够重复加锁,即当前线程获取该锁再次获取不会被阻塞 * 可中断:当等待中,线程可以中断等待去执行其他任务 * 公平锁:比较等待时间 * */ private Lock lock = new ReentrantLock(); //产生与当前重入锁绑定的Condtion实例 private Condition cd1 = lock.newCondition(); private Condition cd2 = lock.newCondition(); private Condition cd3 = lock.newCondition(); public void loopA(int runTimes) {  //上锁  lock.lock();  try {   //1.判断   if (flag != 1) {    //进入等待状态    cd1.await();   }   //打印   for (int i = 0; i < 1; i++) {    System.out.println(Thread.currentThread().getName() + "\t" + i + "\t" + runTimes);   }   //唤醒线程   flag = 2;   cd2.signal();  } catch (InterruptedException e) {   e.printStackTrace();  } finally {   //要在finally里面解锁,要不然可能会出现异常   lock.unlock();  } } public void loopB(int runTimes) {  lock.lock();  try {   //1.判断   if (flag != 2) {    cd2.await();   }   //打印   for (int i = 0; i < 1; i++) {    System.out.println(Thread.currentThread().getName() + "\t" + i + "\t" + runTimes);   }   //唤醒   flag = 3;   cd3.signal();  } catch (InterruptedException e) {   e.printStackTrace();  } finally {   lock.unlock();  } } public void loopC(int runTimes) {  lock.lock();  try {   //1.判断   if (flag != 3) {    cd3.await();   }   //打印   for (int i = 0; i < 1; i++) {    System.out.println(Thread.currentThread().getName() + "\t" + i + "\t" + runTimes);   }   //唤醒   flag = 1;   cd1.signal();  } catch (InterruptedException e) {   e.printStackTrace();  } finally {   lock.unlock();  } }}








原文转载:http://www.shaoqun.com/a/759810.html

跨境电商:https://www.ikjzd.com/

跨境通电子商务平台:https://www.ikjzd.com/w/1329.html

虚拟信用卡:https://www.ikjzd.com/w/1055


JUC之分别打印A,B,C线程的并发编程:什么是juc:juc是java.util.concurrent下的类包,专门用于多线程的处理。并发编程的本质目的就是为了充分发挥出CPU的计算能力。上代码分析:要求:一个程序,开启3个线程,线程id分别为A,B,C,使这3个线程按顺序执行,运行次数自定。/***要求:一个程序,开启3个线程,线程id分别为A,B,C,使这3个线程按顺序执行,运行次数自定。*
友家快递:https://www.ikjzd.com/w/1341
美菜:https://www.ikjzd.com/w/1874
飞书互动:https://www.ikjzd.com/w/1319
请收下这份亚马逊爆款潜力选品指南:https://www.ikjzd.com/articles/141760
亚马逊产品促销推广和引流策略三板斧之Deal活动(下):https://www.ikjzd.com/articles/123658
我为丑老公生了一对漂亮儿女:http://www.30bags.com/m/a/253047.html

此博客中的热门博文

被外媒称为AI界最大黑马的国产之光DeepSeek问世,硅谷大牛慌了

跨境电商资讯:美国企业报税:如何有效管理

TG 纸飞机老号购买|点击下面查看原文进入购买|TG账号购买经验分享