zoukankan      html  css  js  c++  java
  • JAVA JUC 线程按顺序执行

    class demo{
        private ReentrantLock lock =new ReentrantLock();
        private Condition cb = lock.newCondition();
        private Condition cc = lock.newCondition();
        private Condition ca = lock.newCondition();
        private int num = 1;
        public void loopA(int epoch){
            lock.lock();
    
            try {
                if(num!=1){
    
                    ca.await();
    
                }
                for(int i=0;i<5;i++){
                    System.out.println(Thread.currentThread().getName()+"  "+i+"	"+epoch);
                }
                num=2;
                cb.signal();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                lock.unlock();
            }
    
        }
        public void loopB(int epoch){
            lock.lock();
    
            try {
                if(num!=2){
                    cb.await();
                }
                for(int i=0;i<5;i++){
                    System.out.println(Thread.currentThread().getName()+"  "+i+"	"+epoch);
                }
                num=3;
                cc.signal();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                lock.unlock();
            }
    
        }
        public void loopC(int epoch){
            lock.lock();
    
            try {
                if(num!=3){
                   cc.await();
                }
                for(int i=0;i<5;i++){
                    System.out.println(Thread.currentThread().getName()+"  "+i+"	"+epoch);
                }
                num=1;
                ca.signal();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                lock.unlock();
            }
    
        }
    }
    public class alterDemo {
        public static void main(String[] args) {
            demo d = new demo();
            new Thread(new Runnable() {
                @Override
                public void run() {
                    for(int i=0;i<20;i++)
                    {
                        d.loopA(i);
                    }
    
                }
            },"A").start();
            new Thread(new Runnable() {
                @Override
                public void run() {
                    for(int i=0;i<20;i++)
                    {
                        d.loopB(i);
                    }
    
                }
            },"B").start();
            new Thread(new Runnable() {
                @Override
                public void run() {
                    for(int i=0;i<20;i++)
                    {
                        d.loopC(i);
                    }
    
                }
            },"C").start();
        }
    }
    View Code
  • 相关阅读:
    AJAX省市县三级联动
    AJAX,JSON搜索智能提示
    AJAX,JSON用户名校验
    原生JS操作AJAX
    JSON和GSON操作json数据
    Servlet之Cookie操作
    路径问题--转发、重定向、表单、超链接
    4418: [Shoi2013]扇形面积并|二分答案|树状数组
    近200篇机器学习&amp;深度学习资料分享
    【Android】Eclipse自己主动编译NDK/JNI的三种方法
  • 原文地址:https://www.cnblogs.com/superxuezhazha/p/12470290.html
Copyright © 2011-2022 走看看