`
magaojie6
  • 浏览: 6017 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

java多线程交替打印ABC

 
阅读更多
public class ABC2 {
    private static Lock lock = new ReentrantLock();
    private static int count = 0;
    private static Condition A = lock.newCondition();
    private static Condition B = lock.newCondition();
    private static Condition C = lock.newCondition();

    public static class A implements Runnable {

        @Override
        public void run() {
            lock.lock();
            try {
                for (int i = 0; i < 10; i++) {
                    while (count % 3 != 0) {
                        A.await();
                    }
                    System.out.print("A");
                    count++;
                    B.signal();
                }
            }
            catch(InterruptedException e){
                e.printStackTrace();
            }finally {
                lock.unlock();
            }
        }
    }
    public static class B implements Runnable {

        @Override
        public void run() {
            lock.lock();
            try {
                for (int i = 0; i < 10; i++) {
                    while (count % 3 !=1) {
                        B.await();
                    }
                    System.out.print("B");
                    count++;
                    C.signal();
                }
            }
            catch(InterruptedException e){
                e.printStackTrace();
            }finally {
                lock.unlock();
            }
        }
    }
    public static class C implements Runnable {

        @Override
        public void run() {
            lock.lock();
            try {
                for (int i = 0; i < 10; i++) {
                    while (count % 3 != 2) {
                        C.await();
                    }
                    System.out.println("C");
                    count++;
                    A.signal();
                }
            }
            catch(InterruptedException e){
                e.printStackTrace();
            }finally {
                lock.unlock();
            }
        }
    }

    public static void main(String[] args) {
        Thread a=new Thread(new A());
        a.start();
        Thread b=new Thread(new B());
        b.start();
        Thread c=new Thread(new C());
        c.start();
    }

}
分享到:
评论

相关推荐

    java多线程每个线程挨着打印ABC的4种实现方式

    java多线程每个线程挨着打印ABC的4种实现方式,有4个线程t1、t2、t3、t4,t1打印A后t2打印A再t3打印A再t4打印A,然后从新回到t1打印B再t2打印B...t4打印B... 4个线程轮流打印abc... 一个线程可以理解为一个人,打印...

    java多线程实现轮流打印ABC

    使用多线程和阻塞队列实现了ABC字母按顺序轮流打印

    juc多线程交替打印ABC、熟悉lock的唤醒机制

    现场交替访问、等待和唤醒

    java代码-三个线程轮流输出abc

    这个例子展示了Java多线程的同步机制,包括synchronized关键字用于控制并发访问,以及wait()和notify()方法用于线程间的通信和协作。这些概念对于理解和解决多线程环境下的同步问题至关重要,是Java程序员必备的技能...

    三个线程交错输出

    总结来说,这个实验主要涉及了以下几个Java多线程的关键知识点: 1. 进程与线程的概念及其关系。 2. Java中的Thread类和线程的创建与启动。 3. 使用synchronized关键字进行线程同步和互斥。 4. wait()和notify()方法...

    Java面试宝典-经典

    50、多线程有几种实现方法?同步有几种实现方法? 33 51、启动一个线程是用run()还是start()? . 33 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念...

    java面试题大全(2012版)

    50、多线程有几种实现方法?同步有几种实现方法? 33 51、启动一个线程是用run()还是start()? . 33 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念...

    最新Java面试宝典pdf版

    50、多线程有几种实现方法?同步有几种实现方法? 33 51、启动一个线程是用run()还是start()? . 33 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念...

    java面试宝典2012

    50、多线程有几种实现方法?同步有几种实现方法? 36 51、启动一个线程是用run()还是start()? . 37 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 37 53、线程的基本概念...

    Java面试宝典2012新版

    50、多线程有几种实现方法?同步有几种实现方法? 33 51、启动一个线程是用run()还是start()? . 33 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念...

    Java面试宝典2012版

    50、多线程有几种实现方法?同步有几种实现方法? 33 51、启动一个线程是用run()还是start()? . 33 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本...

Global site tag (gtag.js) - Google Analytics