首页 > 其他分享 >多线程循环打印123

多线程循环打印123

时间:2023-12-30 20:55:23浏览次数:32  
标签:Thread lock 打印 private flag 123 new 多线程 public

1、多线程循环打印123

import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class PrintThread {

    private Lock lock = new ReentrantLock();
    private volatile int flag = 1;  // 控制执行哪个线程

    private Condition condition1 = lock.newCondition();
    private Condition condition2 = lock.newCondition();
    private Condition condition3 = lock.newCondition();

    public static void main(String[] args) {
        PrintThread printThread = new PrintThread();

        for (int i = 0; i < 10; i++) {
            new Thread(() -> printThread.printA(), "A").start();

            new Thread(() -> printThread.printB(), "B").start();

            new Thread(() -> printThread.printC(), "C").start();
        }
    }

    public void printA() {

        lock.lock();

        try {
            while (flag != 1) {
                condition1.await();
            }
            System.out.println(Thread.currentThread().getName() + " : 1");
            flag = 2;
            condition1.signalAll();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } finally {
            lock.unlock();
        }

    }

    public void printB() {
        lock.lock();

        try {
            while (flag != 2) {
                condition2.await();
            }
            System.out.println(Thread.currentThread().getName() + " : 2");
            flag = 3;
            condition2.signalAll();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } finally {
            lock.unlock();
        }
    }


    public void printC() {
        lock.lock();

        try {
            while (flag != 3) {
                condition3.await();
            }
            System.out.println(Thread.currentThread().getName() + " : 3");
            flag = 1;
            condition3.signalAll();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } finally {
            lock.unlock();
        }
    }

}

。。。

标签:Thread,lock,打印,private,flag,123,new,多线程,public
From: https://www.cnblogs.com/guoyu1/p/17936812

相关文章

  • *035共情营邱月帮-第17次课(周六晚上-AB对练-)-20231230
      20221212--20221230期间每周一、四、五上正课,三、六是对答疑、对练课。 打开心灵,改变从自己开始,一起抱团取暖。《相信相信的力量》----------------------------------------------------------------------------------------------------------------(周六)-202312......
  • 云打印安全吗?云打印文件会泄露吗?
    随着互联网的发展,云打印的概念也随之火热了起来。所谓云打印就是依托于现在的互联网技术,让用户的需求通过云打印平台即可打印。那么云打印安全吗?云打印文件会泄露吗?今天小易就带大家来了解一下。 云打印安全吗?云打印文件会泄露吗?坦诚的说,云打印并非是绝对安全的,因为总有部分......
  • 关于python3多线程和协程
    以下内容部分由chatgpt生成,本文仅作为备忘和记录。asyncio.sleep和time.sleep都是用于在Python中进行延迟操作的函数,但它们的工作方式和使用场景有一些不同。asyncio.sleep:asyncio.sleep是用于在异步代码中进行暂停的函数,它是asyncio模块中的一部分。在异步程序中......
  • nodejs多线程-共享内容
    前言:昨天遇到基于Nodejs启动多线程,以便不同服务之间可以调用(共享内存) worker_threadsnode官方文档注明了:worker_threads模块允许使用并行地执行JavaScript的线程。与child_process或cluster不同,worker_threads可以共享内存。它们通过传输ArrayBuffer实例或共享Sh......
  • java-多线程编程
    多线程是指在一个程序中同时执行多个线程,每个线程都是独立运行的。Java中的多线程编程允许在同一个程序中同时执行多个任务,以提高程序的效率和响应性。以下是一些与Java多线程编程相关的重要概念:线程(Thread):线程是程序的执行单元,可以并发执行多个任务。在Java中,可以通过创建Thre......
  • 云打印怎么取件?云打印怎么收到打印的文件?
    随着互联网的发展,打印需求的生产商逐渐从线下打印店到线上打印平台,而云打印也随之进入了众多有打印需求的群体眼里。但随之而来的还有一个问题,那就是云打印怎么取件?云打印怎么收到打印的文件呢?今天小易就带大家来了解一下。 云打印怎么取件?云打印怎么收到打印的文件?其实云打......
  • CF1234F 题解
    blog。小清新题,下文\(V=20\)即值域。反转操作,本质就是选两个不相交连续段拼起来。显然合法的最终串长度一定\(\leV\)。将这些合法串预处理出来,那么每个串都对应一个「字母集合」。随便DP一下,求出所有集合中,的最大的合法「字母集合」大小。\(dp_{\smallU}\)就是只选一......
  • py123——模拟体育竞技分析:乒乓球比赛
    模拟体育竞技分析:一.‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬采用乒乓球比赛规则一局比赛:‪‬......
  • Java多线程:数据一致性问题及解决方案
    引言在面向对象的编程语言Java中,多线程编程是一个强大的工具,可以使我们能够构建高效率和高并发的应用程序。然而,多线程环境下的数据共享也带来了数据一致性的挑战。在本文中,我们将探讨Java多线程中的数据一致性问题,并提出几种解决方案。数据一致性问题当多个线程同时对共享资源进行......
  • 云打印系统怎么接入?
    随着互联网的发展,打印需求的生产商逐渐从线下打印店到线上打印平台,而云打印也随之进入了众多有打印需求的群体眼里。对于这类只有打印需求、没打印设备的用户来说,云打印无疑是一个性价比极高的解决方案。那么用户该怎么接入云打印系统呢?今天就带大家来了解一下。 云打印系统......