• 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变量读写,如果不使用读写锁,则程序会抛出异常。

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

  • 相关阅读:
    tableView cell 设置圆角 响应链
    iOS
    git code 初次上传
    隐藏导航栏,偏移20PX
    Mysql数据库远程连接
    umeng推送, 生产环境deviceToken失效可能原因
    KeyChainWrapper
    UIVisualEffectView(高斯模糊效果)
    UVA 11582 Colossal Fibonacci Numbers! 快速幂
    HDU 2859 Phalanx DP
  • 原文地址:https://www.cnblogs.com/java-koma/p/4052889.html
Copyright © 2020-2023  润新知