zoukankan      html  css  js  c++  java
  • Java-ReentrantReadWriteLock的简单样例

    内容:读锁时共享的。写锁时相互排斥的(可见执行结果)。都是通过AQS实现的。

    public class ReentrantReadWriteLockTest {
    	
    	static class MyObject {
    		private Object object;
    		private ReadWriteLock lock = new ReentrantReadWriteLock();
    		
    		public void get() {
    			lock.readLock().lock();
    			System.out.println(Thread.currentThread().getName() + "准备读数据!!");
    			
    			try {
    				Thread.sleep(new Random().nextInt(1000));
    				System.out.println(Thread.currentThread().getName() + "读数据为:" + this.object);
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			} finally {
    				lock.readLock().unlock();
    			}
    		}
    		
    		public void put(Object object) {
    			lock.writeLock().lock();
    			System.out.println(Thread.currentThread().getName() + "准备写数据");
    			
    			try {
    				Thread.sleep(new Random().nextInt(1000));
    				this.object = object;
    				System.out.println(Thread.currentThread().getName() + "写数据为" + this.object);
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			} finally {
    				lock.writeLock().unlock();
    			}
    		}
    	}
    	
    	public static void main(String[] args) throws InterruptedException {
    		final MyObject myObject = new MyObject();
    		ExecutorService executor = Executors.newCachedThreadPool();
    		
    		for (int i = 0; i < 3; i++) {
    			executor.execute(new Runnable() {
    				
    				@Override
    				public void run() {
    					for (int j = 0; j < 5; j++)
    						myObject.put(new Random().nextInt(1000));
    				}
    			});
    		}
    		
    		for (int i = 0; i < 3; i++) {
    			executor.execute(new Runnable() {
    				
    				@Override
    				public void run() {
    					for (int j = 0; j < 5; j++)
    						myObject.get();
    				}
    			});
    		}
    		
    		executor.shutdown();
    	}
    
    }


    执行结果:



  • 相关阅读:
    Struts2 动态方法调用
    Struts2 NameSpace空间的使用
    Struts2基本结构
    Android TextView Button按钮 属性
    【转】vue 手动挂载$mount() 获取 $el
    【转】逻辑架构和物理架构
    EntityFramework Code First 构建外键关系,数据库不生成外键约束
    HTML Document 头
    CSS 浏览器兼容
    PageMethods
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/6895690.html
Copyright © 2011-2022 走看看