• ReentrantReadWriteLock三个线程读数据,三个线程写数据


    /***
     * 三个线程读数据,三个线程写数据
     *
     */
    public class ReadWriteLockTest {
    
        public static void main(String[] args) {
            final ReadWrite rw = new ReadWrite();
            for (int i = 0; i < 3; i++) {
                new Thread() {
                    public void run() {
                        while (true) {
                            rw.read();
                        }
                    }
    
                }.start();
    
                new Thread() {
                    public void run() {
                        while (true) {
                            rw.write(new Random().nextInt(10000));
                        }
                    }
    
                }.start();
            }
    
        }
    }
    
    /**
     * 读和写要互斥,因此要把它们放在同一个类中
     *
     *
     */
    class ReadWrite {
        private Object data = null;// 共享数据,只能有一个线程写该数据,但可以有多个线程同时读该数据。
        ReadWriteLock rwl = new ReentrantReadWriteLock();
    
        /**
         * 读数据
         */
        public void read() {
    
            rwl.readLock().lock();
            try {
                System.out.println(Thread.currentThread().getName() + " be ready to read data!");
                Thread.sleep((long) (Math.random() * 1000));
                System.out.println(Thread.currentThread().getName() + "have read data :" + data);
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                rwl.readLock().unlock();
            }
    
        }
    
        /**
         * 写数据
         *
         * @param data
         */
        public void write(Object data) {
    
            rwl.writeLock().lock();
            try {
                System.out.println(Thread.currentThread().getName() + " be ready to write data!");
                Thread.sleep((long) (Math.random() * 1000));
                this.data = data;
                System.out.println(Thread.currentThread().getName() + " have write data: " + data);
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                rwl.writeLock().unlock();
            }
    
        }
    }
  • 相关阅读:
    如何让touchmove之后不触发touchend的事件
    解决alert在ios版微信中显示url的问题(重写alert)
    meta常用标签总结
    HTTP状态码
    前端用到的一些功能
    判断鼠标从哪个方向进入--jQuery
    jsonp是什么
    数据结构与算法之链表-javascript实现
    数据结构之栈-JavaScript实现栈的功能
    数据结构之列表-javascript实现
  • 原文地址:https://www.cnblogs.com/moris5013/p/11764826.html
Copyright © 2020-2023  润新知