• 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();
            }
    
        }
    }
  • 相关阅读:
    iaf——接口自动化测试框架
    性能优化系列
    MVC架构简介及其测试策略
    10种常见的软件架构模式
    软件开发框架分析和架构模式
    安全测试基础&安全测试---AppScan扫描工具
    WEB安全测试要点总结
    大数据Hadoop Hive HBase Spark Storm
    第三方授权方式1
    java-weixin-tools接入微信
  • 原文地址:https://www.cnblogs.com/moris5013/p/11764826.html
Copyright © 2020-2023  润新知