java 线程 lock

package com.hym.test.thread;

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 Data data = new Data();
		for (int i = 0; i < 3; i++) {
			new Thread(new Runnable() {
				public void run() {
					for (int j = 0; j < 5; j++) {
						data.set(new Random().nextInt(30));
					}
				}
			}).start();
		}
		for (int i = 0; i < 3; i++) {
			new Thread(new Runnable() {
				public void run() {
					for (int j = 0; j < 5; j++) {
						data.get();
					}
				}
			}).start();
		}
	}
}

class Data {
	private int data;// 共享数据
	private ReadWriteLock rwl = new ReentrantReadWriteLock();

	public void set(int data) {
		System.out.println(Thread.currentThread().getName() + "准备写入数据");
		try {
			rwl.writeLock().lock();// 取到写锁
			Thread.sleep(20);
		} catch (InterruptedException e) {
			e.printStackTrace();
		} finally {
			rwl.writeLock().unlock();
		}
		this.data = data;
		System.out.println(Thread.currentThread().getName() + "写入" + this.data);
	}

	public void get() {
		System.out.println(Thread.currentThread().getName() + "准备读取数据");
		try {
			rwl.readLock().lock();
			Thread.sleep(20);
		} catch (InterruptedException e) {
			e.printStackTrace();
		} finally {
			rwl.readLock().unlock();
		}
		System.out.println(Thread.currentThread().getName() + "读取" + this.data);
	}
}

你可能感兴趣的:(java)