`
zjxs_sky100
  • 浏览: 29661 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ReadWriteLock多线程下操作

 
阅读更多
ReadWriteLock是实现多线程环境下同步的一种方式。与synchronized相比,它在读的频率大于写的频率的时候,效率有很大的提升。而且拥有writelock的情况下还可以拥有readlock,相反则不能。

提供一个多线程环境的资源类
package zl.readandwrite.date;


import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;

public class DateUtil {

private ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
private Lock readLock = readWriteLock.readLock();
private Lock writeLock = readWriteLock.writeLock();
private String date = "2012-10-10" ;

public  String get() {
String date = null ;
readLock.lock();
try {
System.out.println(Thread.currentThread().getName());
Thread.sleep(2000);
System.out.println(Thread.currentThread().getName());
date = this.date ;
return date ;
} catch (InterruptedException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} finally {
readLock.unlock();
}
return null ;
}

public void set(String date) {
writeLock.lock() ;
try {
System.out.println(Thread.currentThread().getName());
Thread.sleep(2000);
System.out.println(Thread.currentThread().getName());
this.date = date ;
} catch (InterruptedException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} finally {
writeLock.unlock();
}
}

}


提供一个线程类:
package zl.readandwrite.thread;

import zl.readandwrite.date.DateUtil;

public class DateThread extends Thread {

private boolean flag ;
private DateUtil dateUtil ;

public DateThread(boolean flag , DateUtil dateUtil) {
this.flag = flag ;
this.dateUtil = dateUtil ;
}

public void run() {
if(flag)
dateUtil.get();
else
dateUtil.set("2011-11-11");
}
}

测试代码:
import zl.readandwrite.date.DateUtil;
import zl.readandwrite.thread.DateThread;


public class Test {

/**
* @param args
*/
public static void main(String[] args) {
DateUtil dateUtil = new DateUtil() ;
Thread date1 = new DateThread(true , dateUtil );
Thread date2 = new DateThread(false , dateUtil );

date1.setName("读数据1");
date2.setName("写数据2");


date2.start();
date1.start();

}

}


输出:
写数据2
写数据2
读数据1
读数据1


分享到:
评论

相关推荐

    java多线程设计模式_java_设计模式_多线程_多线程课题_

    Java提供了一些线程安全的集合类,如ConcurrentHashMap、CopyOnWriteArrayList和CopyOnWriteArraySet,它们在多线程环境下提供了高并发的访问性能。 九、死锁检测与避免 死锁是多线程编程中的常见问题,两个或多个...

    netty5多线程编程

    JMM还定义了八种操作来完成主内存和工作内存之间的变量访问,这些操作包括lock、unlock、read、load、use、assign、store和write,这些操作确保了多线程之间的内存访问同步。 在Netty5中,多线程并发编程的应用主要...

    精通java多线程

    通过学习和掌握以上Java多线程的知识点,你将能够编写出更加健壮、高效的多线程程序,有效应对并发场景下的各种挑战。在实际开发中,结合具体业务需求,灵活运用这些概念和工具,可以大大提高代码质量和系统性能。

    ReadWriteLock

    读写锁(ReadWriteLock)是多线程编程中一种重要的同步机制,主要用于提高并发性能。在Windows环境下,C++可以通过自定义实现或者使用系统提供的API来创建读写锁。在这个项目中,`ReadWriteLock.cpp` 和 `...

    Java多线程的总结

    在多线程环境下,数据共享可能会引发数据不一致的问题。Java提供了多种同步机制,如synchronized关键字、volatile变量、Lock接口(ReentrantLock、ReadWriteLock等)和Semaphore信号量。synchronized提供互斥访问,...

    Java多线程之readwritelock读写分离的实现代码

    Java多线程之readwritelock读写分离的实现代码主要介绍了Java多线程之readwritelock读写分离的相关内容,文中涉及具体实例代码,具有一定参考价值,需要的朋友可以了解下。 在多线程开发中,经常会出现一种情况,...

    多线程安全退出实例源代码

    6. **finally块**:在多线程代码中,`try-finally`结构通常用于确保在任何情况下都能执行清理操作,比如关闭文件流、网络连接等。 7. **线程局部变量(ThreadLocal)**:这些变量为每个线程提供独立的副本,避免了...

    基于Java多线程与线程安全实践(源码+使用文档)

    并发集合操作:展示如何在多线程环境下安全地操作集合类,如ConcurrentHashMap和CopyOnWriteArrayList。 线程生命周期管理:示例代码展示如何创建、启动、管理和终止线程。 线程通信:展示线程间的通信机制,包括...

    java多线程、锁的教程跟案例

    Java多线程与锁是Java并发编程中的核心概念,它们对于构建高效、可扩展的并发应用程序至关重要。在Java中,多线程允许程序同时执行多个任务,提高CPU的利用率,而锁则是用来控制多线程间共享资源的访问,确保数据的...

    java多线程设计模式源码

    Java多线程设计模式是构建高并发、高性能应用的关键技术之一。这些模式通过优化资源利用、提高程序可读性和可维护性,使并发编程更加高效和安全。以下将详细讲解标题和描述中涉及的一些核心知识点: 1. **线程池...

    多线程程序避免冲突的3条简单规则

    在多线程环境下,共享状态是引发冲突的主要源头。如果可能,应尽量减少类和对象的共享状态,或者完全避免它们。可以使用以下策略来降低共享: 1. 使用不可变对象:不可变对象一旦创建就无法改变其状态,因此它们在...

    多线程与高并发-电子.pdf

    在当今的互联网时代,特别是在产业互联网和5G技术的推动下,多线程和高并发的应用变得越来越广泛,它们是构建高性能服务器、桌面应用、移动应用、云计算和大数据处理系统等技术的基础。 首先,我们需要了解什么是...

    Java多线程运算集合

    - 多任务是指操作系统能够同时处理多个任务的能力,而多线程则是实现多任务的一种方式。 - 在Java中,线程的执行不是真正意义上的“同时”,而是通过时间片轮换来模拟多任务的执行。 - **Java中的线程**: - 在...

    多线程concurrent的用例

    8. **Atomic类**: `Atomic`系列类提供了原子操作,如`AtomicInteger`、`AtomicLong`等,可以在多线程环境下保证数据更新的原子性和可见性,无需显式同步。 在"多线程例子"这个压缩包中,可能包含了上述各种并发工具...

    java多线程设计模式详解

    在设计多线程程序时,需要考虑多线程环境下资源共享、线程同步、死锁避免、性能优化等诸多问题。以下将详细介绍Java多线程设计模式中常见的知识点。 首先,线程同步是多线程设计中的核心问题之一。在多线程环境中,...

    Java多线程编程总结

    - 当前的操作系统通常为多任务操作系统,多线程是实现多任务的一种手段。 - **进程**:指内存中运行的应用程序,每个进程拥有独立的内存空间。例如,在Windows系统中,一个运行中的exe文件就是一个进程。 - **...

    多线程(thread)的操作示例

    在Java中,多线程允许程序同时执行多个不同的任务,这极大地提高了程序的执行效率和响应速度,特别是在处理并发用户请求、进行大量I/O操作或计算密集型任务时。 首先,我们来理解一下什么是线程。线程是操作系统...

    多线程经典文档+代码

    2. **线程同步**:为了避免多线程环境中的数据竞争问题,Java提供了多种同步机制,如synchronized关键字、Lock接口(ReentrantLock、ReadWriteLock等)、Semaphore信号量、CountDownLatch倒计时器等。这些工具可以...

Global site tag (gtag.js) - Google Analytics