传统版

作者: Quillagua | 来源:发表于2020-03-27 00:13 被阅读0次
    /**
     * 共享资源类
     */
    class ShareData {
        private int num = 0;
        private Lock lock = new ReentrantLock();
        private Condition condition = lock.newCondition();
    
        public void increment() throws Exception {
            lock.lock();
            try {
                //判断
                while (num != 0) {
                    //等待 不生产
                    condition.await();
                }
                //干活
                num++;
                System.out.println(Thread.currentThread().getName() + "\t" + num);
                //通知唤醒
                condition.signalAll();
            } finally {
                lock.unlock();
            }
        }
    
        public void deIncrement() throws Exception {
            lock.lock();
            try {
                //判断
                while (num == 0) {
                    //等待 不生产
                    condition.await();
                }
                //干活
                num--;
                System.out.println(Thread.currentThread().getName() + "\t" + num);
                //通知唤醒
                condition.signalAll();
            } finally {
                lock.unlock();
            }
        }
    }
    /**
     * Description
     * 一个初始值为0的变量 两个线程交替操作 一个加1 一个减1来5轮
     *
     * @author veliger@163.com
     * @version 1.0
     * @date 2019-04-13 14:01
     **/
    public class ProdConsumerTraditionDemo {
        public static void main(String[] args) {
            ShareData shareData = new ShareData();
            new Thread(() -> {
                for (int i = 1; i <= 5; i++) {
                    try {
                        shareData.increment();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }, "AA").start();
            new Thread(() -> {
                for (int i = 1; i <= 5; i++) {
                    try {
                        shareData.deIncrement();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }, "BB").start();
        }
    }
    

    相关文章

      网友评论

          本文标题:传统版

          本文链接:https://www.haomeiwen.com/subject/btlkuhtx.html