• JAVA锁


    读写锁(ReadWriteLock)

     

      为了提高性能,Java提供了读写锁,读写锁分为读锁和写锁。多个读锁不互斥,读锁与写锁互斥,写锁与写锁互斥,这是由JVM控制的。如果没有写锁的情况下,读是无阻塞的,在一定程度上提高了程序的执行效率。

    读锁

      如果你的代码只读数据,可以很多人同时读,但不能同时写,那就上读锁。

    写锁

      如果你的代码修改数据,只能有一个人在写,且不能同时读取,那就上写锁。总之,读的时候上读锁,写的时候上写锁。

    Java中读写锁有个接口,java.util.concurrent.locks.ReadWriteLock,也有具体的实现ReentrantReadWriteLock。

    代码示例:

    复制代码
     1 public class TestReadWriteLock {
     2     public static void main(String[] args) {
     3         ReadWriteLockDemo rw = new ReadWriteLockDemo();        
     4         new Thread(new Runnable() {            
     5             public void run() {
     6                 rw.set((int)(Math.random() * 101));
     7             }
     8         }, "Write:").start();
     9         for (int i = 0; i < 100; i++) {
    10             new Thread(new Runnable() {
    11                 public void run() {
    12                     rw.get();
    13                 }
    14             }).start();
    15         }
    16     }
    17 }
    18 class ReadWriteLockDemo{
    19     private int number = 0;
    20     private ReadWriteLock lock = new ReentrantReadWriteLock();
    21     //读
    22     public void get(){
    23         lock.readLock().lock(); //上锁
    24         try{
    25             System.out.println(Thread.currentThread().getName() + " : " + number);
    26         }finally{
    27             lock.readLock().unlock(); //释放锁
    28         }
    29     }
    30     //写
    31     public void set(int number){
    32         lock.writeLock().lock();
    33         try{
    34             System.out.println(Thread.currentThread().getName());
    35             this.number = number;
    36         }finally{
    37             lock.writeLock().unlock();
    38         }
    39     }
    40 }
  • 相关阅读:
    1347: Last Digit (周期函数)
    1363: Count 101 (经典数位dp)
    1360: Good Serial Inc.(不知道是什么类型的题)
    C#winForm调用WebService的远程接口
    Web Service 的创建简单编码、发布和部署
    极致精简的webservice集成例子
    SVN使用教程总结
    C# int.Parse()与int.TryParse()
    C# 函数1 (函数的定义)
    C#中的委托和事件
  • 原文地址:https://www.cnblogs.com/qiu18359243869/p/11911026.html
Copyright © 2020-2023  润新知