`

多线程之读写锁

    博客分类:
  • java
阅读更多

 

/**
 * 读写锁:分为读锁和写锁,多个读锁不互斥,读锁与写锁互斥,这是由jvm自己控制的,
 * 我们只要上好相应的锁即可。如果你的代码只读数据,可以很多人同时读,但不能同时写,
 * 那就上读锁;如果你的代码修改数据,只能有一个人在写,且不能同时读取,那就上写锁。
 * 总之,读的时候上读锁,写的时候上写锁!
 *
 * ReentrantReadWriteLock--顾名思义是可重入的读写锁,
 * 允许多个读线程获得ReadLock,但只允许一个写线程获得WriteLock
 *
 * 读写锁一种先进的线程锁机制。允许多个线程在同一时间对某特定资源进行读取,
 * 但同一时间内只能有一个线程对其进行写入。
 */
public class ReadWriteLockTest {
 private User user = new User();
 private ReentrantReadWriteLock lock = new ReentrantReadWriteLock();

 public static void main(String[] args) {
  ReadWriteLockTest o = new ReadWriteLockTest();
  o.user.setName("w");
  o.user.setDesc("w");
  
  for(int i=0;i<50;i++) {
   o.new Read().start();
   o.new Write().start();
  }
 }

 class User{
  private String name;
  private String desc;
  
  public String getName() {
   return name;
  }
  public void setName(String name) {
   this.name = name;
  }
  public String getDesc() {
   return desc;
  }
  public void setDesc(String desc) {
   this.desc = desc;
  }
 }
 
 class Read extends Thread{
  public void run() {
   lock.readLock().lock(); //获取值用读锁
    System.out.println(user.getName() + ","+user.getDesc());
   lock.readLock().unlock();
   try {
    Thread.sleep(100);
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
  }
 }
 
 class Write extends Thread{
  public void run() {
   lock.writeLock().lock(); //设值用写锁
    String name = new Random().nextInt(100) + "";
    user.setName(name);
    
    try {
     Thread.sleep(10);
    } catch (InterruptedException e) {
     e.printStackTrace();
    }
    user.setDesc(name);
   lock.writeLock().unlock();
  }
 }
}

0
0
分享到:
评论

相关推荐

    易语言线程安全之原子锁与读写锁

    总结来说,线程安全是多线程编程的基础,而原子操作和读写锁是实现线程安全的重要工具。易语言提供了丰富的支持,使得开发者能够方便地在自己的程序中实现线程安全,从而构建高效且稳定的多线程应用程序。通过合理...

    C#使用读写锁三行代码简单解决多线程并发的问题

    本文通过三行代码展示了如何使用读写锁解决多线程并发写入文件的冲突。 读写锁的核心在于,它允许多个线程同时读取资源,但只允许一个线程写入资源。这样,当多个线程尝试写入时,只有一个线程能够获得写锁,其他...

    C#多线程读写sqlite

    标题"**C#多线程读写sqlite**"涉及的主要知识点包括: 1. **多线程编程**:C#中的`System.Threading`命名空间提供了丰富的类和方法来创建和管理线程,如`Thread`类、`Task`类以及`ThreadPool`。通过多线程,程序...

    python多线程同步之文件读写控制

    然后,在`file_lock.py`的2.1部分,展示了没有使用任何同步机制(即不加锁)的多线程读写文件。这会导致并发问题,如输出所示,数据被错误地读取和写入,因为多个线程可能同时访问文件,导致数据混乱。 为了修复这...

    多线程通信读写文件

    特别是在处理大量数据时,如读写文件,多线程可以同时执行不同的任务,从而显著提高整体性能。本项目着重探讨如何在多线程环境中实现安全有效的文件读写操作。 首先,我们需要理解多线程的基本概念。在单核处理器...

    c#多线程读写锁操作

    为了解决这个问题,C#提供了一种名为“读写锁”(ReaderWriterLockSlim)的同步原语,它允许对共享资源进行高效的读写控制,确保了多线程的安全性。本文将深入探讨如何利用读写锁在C#中实现多线程的高效安全资源访问...

    c#多线程读写锁 MutilThreadReadWriterLock

    在c#中使用多线程同步是一个头痛的问题,比较经常用的是lock(object){}这种方法,但是这种方法在读多写少的时候比较浪费资源,当然c#也提供了一种读写锁,我这里只是提供一个原创读写锁的类的源代码,该类的主要目的是...

    一个多线程同步读写的小程序

    特别是在处理I/O密集型任务(如读写文件)时,多线程可以显著提升性能。在这个“一个多线程同步读写的小程序”中,我们看到开发者尝试通过创建读线程和写线程来同时进行数据的读取和写入,以优化程序的执行流程。 ...

    秒杀多线程第十六篇 多线程十大经典案例之一 双线程读写队列数据

    在《秒杀多线程系列》的前十五篇中介绍多线程的相关概念,多线程同步互斥问题《秒杀多线程第四篇一个经典的多线程同步问题》及解决多线程同步互斥的常用方法——关键段、事件、互斥量、信号量、读写锁。为了让大家...

    多线程(22)读写锁分离模式1

    在多线程编程中,读写锁是一种优化并发访问共享资源效率的重要机制。读写锁分离模式允许多个读取操作并行执行,而写入操作则保持互斥,从而提高系统的整体性能。Java中提供了`java.util.concurrent.locks....

    线程间同步机制 读写锁通信机制 线程与信号

    线程间同步是多线程编程中的重要概念,它确保了多个线程在访问共享资源时的正确性,避免了数据竞争和不一致状态。在Linux高级程序设计中,主要介绍了三种线程同步机制:互斥锁、条件变量和读写锁,以及线程与信号的...

    Delphi XE10.2.3多线程大量读和少量写公共资源时,用原子自旋读写锁代替互斥锁提高效率

    对于一个高性能服务器在处理多数读取,少量写入的场景时,如果还是使用常规的互斥锁方式,显然就不明智了,这种读多写少的场景最适合使用读写锁方式,读取时不加锁,多线程并发读取,效率是最高的,要写入数据时堵塞...

    WINDOWS读写锁实现

    在Windows操作系统中,读写锁(Read-Write Lock)是一种多线程同步原语,它允许多个线程同时读取共享资源,但在写入时仅允许一个线程访问。这提高了并发性能,尤其是在读操作远多于写操作的场景下。本篇文章将深入...

    windows和linux读写锁C++实现

    在多线程编程中,读写锁是一种非常重要的同步机制,它允许多个读线程同时访问共享资源,但只允许一个写线程独占资源,从而提高了并发性能。本话题将详细探讨在Windows和Linux环境下,如何使用C++来实现读写锁。 ...

    C#解决SQlite并发异常问题的方法(使用读写锁)

    本文实例讲述了C#解决SQlite并发异常问题的方法。分享给大家供大家参考,...作者利用读写锁(ReaderWriterLock),达到了多线程安全访问的目标。 using System; using System.Collections.Generic; using System.Text;

    windows 读写锁 (基于关键区的读写锁类 及自动锁)

    在Windows操作系统中,线程同步是多线程编程中的一个重要概念,它确保多个线程能够协同工作,避免数据竞争和不一致性。其中,读写锁(Read-Write Lock,简称RWLock)是一种高效的线程同步机制,适用于大量读取操作和...

    写优先防止读线程饿死的读写锁

    读写锁(Read-Write Lock),也称为共享独占锁,是多线程编程中一种高效的数据同步机制。它允许多个读线程同时访问数据,但只允许一个写线程独占资源,确保数据的一致性。在某些情况下,这种锁能够显著提高并发性能...

    java 读写锁代码

    Java 读写锁是Java并发编程中的一种重要机制,它为多线程环境下的数据访问提供了更为精细的控制。在Java的`java.util.concurrent.locks`包中,`ReentrantReadWriteLock`类实现了读写锁的功能。这个锁允许多个读取者...

    多线程文件读写ThreadREADWrite

    总结起来,多线程文件读写涉及的核心知识点包括:多线程编程、线程同步机制(互斥量、信号量、读写锁)、文件流管理以及异常处理。正确理解和运用这些技术,能够有效地解决并发访问同一文件时可能出现的问题,提高...

    delphi多线程 读写数据

    以下是使用TThread进行多线程读写的步骤: 1. **创建TThread子类**:首先,创建一个新的类,继承自TThread。在这个新类中,定义你需要在线程中执行的代码,即读取或写入数据的逻辑。 ```delphi type ...

Global site tag (gtag.js) - Google Analytics