package com.using.weixin.action;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class WxTest {
static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static void main(String[] args) throws InterruptedException {
Data data = new Data();
//多个线程执行读操作可同时进行
// Worker t1 = new Worker(data, true);
// Worker t2 = new Worker(data, true);
// t1.start();
// t2.start();
//多个线程同时执行执行读写操作时,写操作等待读操作完后才执行
// Worker t1 = new Worker(data, true);
// Worker t2 = new Worker(data, false);
// t1.start();
// t2.start();
//多个线程同时执行执行读写操作时,读操作等待写操作完后才执行
// Worker t1 = new Worker(data, false);//写操作
// Worker t2 = new Worker(data, true);
// t1.start();
// t2.start();
//多个线程同时执行执行写操作时,按照先后顺序执行(谁先占用谁先写)
Worker t1 = new Worker(data, false);//写操作
Worker t2 = new Worker(data, false);
t1.start();
t2.start();
}
static class Worker extends Thread {
Data data;
boolean read;
public Worker(Data data, boolean read) {
this.data = data;
this.read = read;
}
public void run() {
if (read)
data.get();
else
data.set();
}
}
static class Data {
ReadWriteLock lock = new ReentrantReadWriteLock();
Lock read = lock.readLock();
Lock write = lock.writeLock();
public void set() {
write.lock();
System.out.println(Thread.currentThread().hashCode()
+ " set:begin " + sdf.format(new Date()));
try {
Thread.sleep(2000);
//
} catch (Exception e) {
} finally {
System.out.println(Thread.currentThread().hashCode()
+ " set:end " + sdf.format(new Date()));
write.unlock();
}
}
public int get() {
read.lock();
System.out.println(Thread.currentThread().hashCode()
+ " get :begin " + sdf.format(new Date()));
try {
Thread.sleep(2000);
//
} catch (Exception e) {
} finally {
System.out.println(Thread.currentThread().hashCode()
+ " get :end " + sdf.format(new Date()));
read.unlock();
}
return 1;
}
}
}
java ReadWriteLock锁
最新推荐文章于 2025-03-20 14:05:18 发布