一篇关于ReadWriteLock不错的文章
来源:互联网 发布:算法和并行计算 编辑:程序博客网 时间:2024/04/26 01:34
- package concurrent;
-
- import java.util.Random;
- import java.util.concurrent.locks.ReentrantReadWriteLock;
- import java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock;
- import java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock;
-
-
-
-
-
-
- public class ReadWriteLockTest {
-
- private ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock();
-
- private ReadLock readLock = readWriteLock.readLock();
-
- private WriteLock writeLock = readWriteLock.writeLock();
-
- private String shareData = "寂寞等待中。。。";
-
- public ReadWriteLockTest() {
- }
-
- public void write(String str) {
- writeLock.lock();
-
-
-
-
- System.err.println("ThreadName:" + Thread.currentThread().getName() + " locking...");
- try {
- shareData = str;
- System.err.println("ThreadName:" + Thread.currentThread().getName() + " 修改为:" + str);
- Thread.sleep(50);
- } catch (InterruptedException e) {
- e.printStackTrace();
- } finally {
- System.err.println("ThreadName:" + Thread.currentThread().getName() + " unlock...");
- writeLock.unlock();
- }
- }
-
- public String read() {
- readLock.lock();
- System.out.println("ThreadName:" + Thread.currentThread().getName() + " lock...");
- try {
- System.out.println("ThreadName:" + Thread.currentThread().getName() + " 获取为:" + shareData);
- Thread.sleep(50);
- } catch (InterruptedException e) {
- e.printStackTrace();
- } finally {
- readLock.unlock();
- System.out.println("ThreadName:" + Thread.currentThread().getName() + " unlock...");
- }
- return shareData;
- }
-
-
-
-
- public static void main(String[] args) {
-
- final ReadWriteLockTest shareData = new ReadWriteLockTest();
-
- for (int i = 0; i < 5; i++) {
- new Thread(new Runnable() {
-
- @Override
- public void run() {
- shareData.read();
- }
- }, "get Thread-" + i).start();
- }
-
- for (int i = 0; i < 10; i++) {
- new Thread(new Runnable() {
- @Override
- public void run() {
- shareData.write(new Random().nextLong() + "");
- }
- }, "write Thread-" + i).start();
-
- }
- }
- }