zoukankan      html  css  js  c++  java
  • java 5 ReadWriteLock

    import java.util.ArrayList;
    import java.util.List;
    import java.util.concurrent.locks.ReadWriteLock;
    import java.util.concurrent.locks.ReentrantReadWriteLock;
    
    public class ReadWriteLockTest
    {
        private static List<String> list = new ArrayList<String>();
        public static void main(String[] args)
        {
            for(int i = 0; i < 10; i++)
            {
                list.add("init - " + i);
            }
            new Thread(new Runnable()
            {
                public void run()
                {
                    try
                    {
                        ReadWriteLockTest.add();
                    }
                    catch (Exception e)
                    {
                        e.printStackTrace();
                    }
                }
            }).start();
            new Thread(new Runnable()
            {
                public void run()
                {
                    try
                    {
                        ReadWriteLockTest.get();
                    }
                    catch (Exception e)
                    {
                        e.printStackTrace();
                    }
                }
            }).start();
        }
        
        private static ReadWriteLock lock = new ReentrantReadWriteLock();
        private static void add() throws Exception
        {
            for(int i = 0; i < 10; i++)
            {
                lock.writeLock().lock();
                list.add("add-" + i);
                lock.writeLock().unlock();
                System.out.println("add " + i);
                Thread.sleep(500);
            }
        }
        
        private static void get() throws Exception
        {
            lock.readLock().lock();
            for(String str : list)
            {
                System.out.println("get- " + str);
                Thread.sleep(500);
            }
            lock.readLock().unlock();
        }
    }

    上面有2个线程同时对list变量读写,如果不使用读写锁,则程序会抛出异常。

    多个读锁不互斥,读锁也写锁互斥,写锁与写锁互斥。

  • 相关阅读:
    docker容器的本质
    golang 算法题 : 二维数组搜索值
    golang 算法题 : 两数相加
    golang 开源代理
    golang vue 使用 websocket 的例子
    互联网技术部门该如何管理
    大数据清洗第一天
    本周总结
    信息领域热词分析性能分析
    本周总结
  • 原文地址:https://www.cnblogs.com/java-koma/p/4052889.html
Copyright © 2011-2022 走看看