zoukankan      html  css  js  c++  java
  • 两个线程,一个线程打印1~52,另一个线程打印字母A-Z,打印顺序为12A34B56C……5152Z

    使用wait,notify实现

    public class Test {
        public synchronized void a() {
            for (int i = 1; i <= 52; i++) {
                System.out.print(i);
                if (i % 2 == 0) {
                    notify();
                    try {
                        wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    
        public synchronized void b() {
            for (char i = 'A'; i <= 'Z'; i++) {
                System.out.print(i);
                notify();
                try {
                    wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
    
        }
    
        public static void main(String[] args) {
            Test test = new Test();
            new Thread(test::a).start();
            new Thread(test::b).start();
        }
    }
    

    使用condition实现

    import java.util.concurrent.locks.Condition;
    import java.util.concurrent.locks.Lock;
    import java.util.concurrent.locks.ReentrantLock;
    
    public class T {
    
        Lock lock = new ReentrantLock();
        Condition aa = lock.newCondition();
        Condition bb = lock.newCondition();
    
        public void a() {
            lock.lock();
            try {
                for (int i = 1; i <= 52; i++) {
                    System.out.print(i);
                    if (i % 2 == 0) {
                        bb.signalAll();
                        try {
                            aa.await();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            } finally {
                lock.unlock();
            }
        }
    
        public void b() {
            lock.lock();
            try {
                for (char i = 'A'; i <= 'Z'; i++) {
                    System.out.print(i);
                    aa.signalAll();
                    try {
                        bb.await();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            } finally {
                lock.unlock();
            }
        }
    
        public static void main(String[] args) {
            T t = new T();
            new Thread(t::a).start();
            new Thread(t::b).start();
        }
    }
    
    
  • 相关阅读:
    2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 (B,F,L,M)
    Coderfroces 862 C. Mahmoud and Ehab and the xor
    [CQOI 2015] 任务查询系统
    [POI 2014] Couriers
    [POJ 2104] K-th Number
    [模板] 可持久化数组
    [AHOI 2006] 上学路线
    [SCOI2009] 生日礼物
    [BZOJ 3436] 小K的农场
    [USACO2007 Demo] Cow Acrobats
  • 原文地址:https://www.cnblogs.com/wilwei/p/11309648.html
Copyright © 2011-2022 走看看