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

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

  • 相关阅读:
    如何用meavn构建mahout项目
    项目分析:对于7种图书推荐算法的组合评测
    项目实战:Mahout构建图书推荐系统
    Mahout推荐算法API详解
    9. Palindrome Number
    26. Remove Duplicates from Sorted Array
    575. Distribute Candies
    单链表的逆置
    回文串的判断
    回文判断(一个栈是不是回文)
  • 原文地址:https://www.cnblogs.com/java-koma/p/4052889.html
Copyright © 2011-2022 走看看