read-write lock

package com.bjsxt.height.lock021;

import java.util.concurrent.locks.ReentrantReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock;
import java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock;

/**
 * Formula: read-read sharing, read-write, write-write mutual exclusion
 *
 */
public class UseReentrantReadWriteLock {

	private ReentrantReadWriteLock rwLock = new ReentrantReadWriteLock();
	private ReadLock readLock = rwLock.readLock();
	private WriteLock writeLock = rwLock.writeLock();
	
	public void read(){
		try {
			readLock.lock();
			System.out.println("Current thread:" + Thread.currentThread().getName() + "Entering...");
			Thread.sleep(3000);
			System.out.println("Current thread:" + Thread.currentThread().getName() + "Exit...");
		} catch (Exception e) {
			e.printStackTrace ();
		} finally {
			readLock.unlock();
		}
	}
	
	public void write(){
		try {
			writeLock.lock();
			System.out.println("Current thread:" + Thread.currentThread().getName() + "Entering...");
			Thread.sleep(3000);
			System.out.println("Current thread:" + Thread.currentThread().getName() + "Exit...");
		} catch (Exception e) {
			e.printStackTrace ();
		} finally {
			writeLock.unlock();
		}
	}
	
	public static void main(String[] args) {
		
		final UseReentrantReadWriteLock urrw = new UseReentrantReadWriteLock();
		
		Thread t1 = new Thread(new Runnable() {
			@Override
			public void run() {
				urrw.read();
			}
		}, "t1");
		Thread t2 = new Thread(new Runnable() {
			@Override
			public void run() {
				urrw.read();
			}
		}, "t2");
		Thread t3 = new Thread(new Runnable() {
			@Override
			public void run() {
				urrw.write();
			}
		}, "t3");
		Thread t4 = new Thread(new Runnable() {
			@Override
			public void run() {
				urrw.write();
			}
		}, "t4");		
		
		t1.start();
		t2.start();
		//t3.start(); // W
		//t1.start(); // R
	
		
		//t3.start();
	//	t4.start();
		
		
		
		
		
		
		
		
	}
}

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=326115649&siteId=291194637