- 浏览: 55230 次
- 性别:
- 来自: 北京
文章分类
最新评论
1:lock和synchronized对比
[java]
view plain
copy
- import java.util.concurrent.locks.Lock;
- import java.util.concurrent.locks.ReentrantLock;
- public class LockTest {
- /**
- * @param args
- */
- public static void main(String[] args) {
- new LockTest().init();
- }
- private void init(){
- final Outputer outputer = new Outputer();
- new Thread( new Runnable(){
- @Override
- public void run() {
- while ( true ){
- try {
- Thread.sleep(10 );
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- outputer.output("zhangxiaoxiang" );
- }
- }
- }).start();
- new Thread( new Runnable(){
- @Override
- public void run() {
- while ( true ){
- try {
- Thread.sleep(10 );
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- outputer.output("lihuoming" );
- }
- }
- }).start();
- }
- static class Outputer{
- Lock lock = new ReentrantLock();
- public void output(String name){
- int len = name.length();
- lock.lock();
- try {
- for ( int i= 0 ;i<len;i++){
- System.out.print(name.charAt(i));
- }
- System.out.println();
- }finally {
- lock.unlock();
- }
- }
- public synchronized void output2(String name){
- int len = name.length();
- for ( int i= 0 ;i<len;i++){
- System.out.print(name.charAt(i));
- }
- System.out.println();
- }
- public static synchronized void output3(String name){
- int len = name.length();
- for ( int i= 0 ;i<len;i++){
- System.out.print(name.charAt(i));
- }
- System.out.println();
- }
- }
- }
2.读写锁:ReadWriteLock
[java]
view plain
copy
- import java.util.Random;
- import java.util.concurrent.locks.ReadWriteLock;
- import java.util.concurrent.locks.ReentrantReadWriteLock;
- public class ReadWriteLockTest {
- public static void main(String[] args) {
- final Queue3 q3 = new Queue3();
- for ( int i= 0 ;i< 3 ;i++)
- {
- new Thread(){
- public void run(){
- while ( true ){
- q3.get();
- }
- }
- }.start();
- new Thread(){
- public void run(){
- while ( true ){
- q3.put(new Random().nextInt( 10000 ));
- }
- }
- }.start();
- }
- }
- }
- class Queue3{
- private Object data = null ; //共享数据,只能有一个线程能写该数据,但可以有多个线程同时读该数据。
- ReadWriteLock rwl = new ReentrantReadWriteLock();
- public void get(){
- rwl.readLock().lock();
- try {
- System.out.println(Thread.currentThread().getName() + " be ready to read data!" );
- Thread.sleep((long )(Math.random()* 1000 ));
- System.out.println(Thread.currentThread().getName() + "have read data :" + data);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }finally {
- rwl.readLock().unlock();
- }
- }
- public void put(Object data){
- rwl.writeLock().lock();
- try {
- System.out.println(Thread.currentThread().getName() + " be ready to write data!" );
- Thread.sleep((long )(Math.random()* 1000 ));
- this .data = data;
- System.out.println(Thread.currentThread().getName() + " have write data: " + data);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }finally {
- rwl.writeLock().unlock();
- }
- }
- }
3.用读写锁实现一个简单缓存机制
[java]
view plain
copy
- import java.util.HashMap;
- import java.util.Map;
- import java.util.concurrent.locks.ReadWriteLock;
- import java.util.concurrent.locks.ReentrantReadWriteLock;
- public class CacheDemo {
- private Map<String, Object> cache = new HashMap<String, Object>();
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- }
- private ReadWriteLock rwl = new ReentrantReadWriteLock();
- public Object getData(String key){
- rwl.readLock().lock();
- Object value = null ;
- try {
- value = cache.get(key);
- if (value == null ){
- rwl.readLock().unlock();
- rwl.writeLock().lock();
- try {
- if (value== null ){
- value = "aaaa" ; //实际失去queryDB();
- }
- }finally {
- rwl.writeLock().unlock();
- }
- rwl.readLock().lock();
- }
- }finally {
- rwl.readLock().unlock();
- }
- return value;
- }
-
}
发表评论
-
ReentrantLock与synchronized的区别
2012-10-22 13:33 483ReentrantLock 的lock机制有2种,忽略中断 ... -
java的concurrent/java.util.concurrent.locks用法详解
2012-10-19 15:49 681java.util.concurrent.locks - ... -
java.util.concurrent详解(四) BlockingQueue
2012-10-19 10:00 7217.BlockingQueue “支持两个附加操作 ... -
java.util.concurrent详解(三)ScheduledThreadPoolExecutor
2012-10-18 14:32 7696. ScheduledThreadPoolExecutor ... -
java.util.concurrent详解(二)Semaphore/FutureTask/Exchanger
2012-10-18 14:31 928------------------------------- ... -
java.util.concurrent详解(一) Latch/Barrier
2012-10-18 14:30 987Java1.5提供了一个非常高效实用的多线程包:java.ut ... -
浅析Java中CountDownLatch用法
2012-10-16 18:09 8CountDownLatch如其所写,是一个倒计数的锁存器,当 ... -
Java轻量级锁原理详解(Lightweight Locking)
2012-10-11 18:06 765大家知道,Java的多线程 ... -
深入理解DCL(双检锁)的安全性
2012-10-11 18:07 906对于双检锁,其实有多种不同的用法,有很多种用法是无论如何不会出 ... -
Java偏向锁实现原理(Biased Locking)
2012-10-11 18:08 717阅读本文的读者,需要对Java轻量级锁有一定的了解,知道loc ... -
多线程下race condition问题
2012-10-11 18:07 1379这个问题的讨论来自内部的一个关于“多线程环境下使用Hashma ...
相关推荐
读写锁的设计实现等.。。。。。。。。。。。。。。。。。。。。
主要介绍了Java多线程编程之读写锁ReadWriteLock用法实例,本文直接给出编码实例,需要的朋友可以参考下
使用 ForkJoinPool 进行分叉和合并,锁 Lock,读写锁 ReadWriteLock 原子性长整型 AtomicLong,原子性引用型 AtomicReference 修改数据: 一 服务端修改数据: 一 文章知识点与官方知识档案匹配,可进一步学习相关...
主要介绍了Java并发编程之显示锁ReentrantLock和ReadWriteLock读写锁,本文讲解了ReentrantLock概况、Lock接口、Lock使用、轮询锁的和定时锁、公平性、可中断获锁获取操作等内容,需要的朋友可以参考下
NULL 博文链接:https://itjiehun.iteye.com/blog/842130
一个Windows下C++读写锁的代码,实现共享读,独占写
1. java.util.concurrent - Java 并发工具包 ...21. 读写锁 ReadWriteLock 22. 原子性布尔 AtomicBoolean 23. 原子性整型 AtomicInteger 24. 原子性长整型 AtomicLong 25. 原子性引用型 AtomicReference
1. java.util.concurrent - Java 并发工具包 ...21. 读写锁 ReadWriteLock 22. 原子性布尔 AtomicBoolean 23. 原子性整型 AtomicInteger 24. 原子性长整型 AtomicLong 25. 原子性引用型 AtomicReference
java_util_concurrent_user_guide_cn.pdf 内容预览: 1.... 读写锁 ReadWriteLock 22. 原子性布尔 AtomicBoolean 23. 原子性整型 AtomicInteger 24. 原子性长整型 AtomicLong 25. 原子性引用型 AtomicReferenc
基于zookeeper的不可重入锁Shared Lock 举例,可重入锁Shared Reentrant Lock 举例,可重入读写锁Shared Reentrant ReadWriteLock 举例
局部变量 rwLock, ReadWriteLock ' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、...
C 语言中的可移植读写锁该项目旨在为 C 创建一个易于使用且可移植的读写锁。这是通过使用 POSIX 信号量和“隐藏”结构声明来实现的,以避免滥用提供的 API。 这个锁是reader-preferred ,这意味着一个 writer 必须...
本资源包含两个 pdf 文档,一本根据 Jakob Jenkov 最新博客 ...21. 读写锁 ReadWriteLock 22. 原子性布尔 AtomicBoolean 23. 原子性整型 AtomicInteger 24. 原子性长整型 AtomicLong 25. 原子性引用型 AtomicReference
ReadWriteLock的使用,实际上由于ReadWriteLock是一个接口,所以实际使用的是ReentrantReadWriteLock子类。同时ReadWriteLock的使用其实也是比较简单的,就是读写的锁的使用以及注意事项而已。
本资源包含两个 pdf 文档,一本根据 Jakob Jenkov 最新博客 ...21. 读写锁 ReadWriteLock 22. 原子性布尔 AtomicBoolean 23. 原子性整型 AtomicInteger 24. 原子性长整型 AtomicLong 25. 原子性引用型 AtomicReference
同步控制是并发程序必不可少的重要手段,本文我们将通过重入锁、读写锁、信号量、倒计数器和循环栅栏以及他们的实例来介绍Java并发程序中的同步控制。 目录线程安全 Thread Safety重入锁 ReentrantLock读写锁 ...
Java并发编程学习宝典(漫画版),Java并发编程学习宝典(漫画版)Java并发编程学习宝典(漫画版)Java并发编程学习宝典(漫画版)Java并发编程学习宝典(漫画版)Java并发编程学习宝典(漫画版)Java并发编程学习...
读写锁源码
目录synchronized的缺陷Lock和ReentrantLock常用方法ReadWriteLock和ReentrantReadWriteLockLock和synchronized区别synchronized锁升级公平锁和非公平锁 synchronized的缺陷 众所周知,synchronized锁是JAVA的关键字...
主要介绍了Java多线程之readwritelock读写分离的相关内容,文中涉及具体实例代码,具有一定参考价值,需要的朋友可以了解下。