ReadWriteLock(三)

xiaoxiao2026-08-13  24

我们启动了5个读线程和2个写线程,运行结果如下: Thread-0 waiting for read... Thread-1 waiting for read... Thread-2 waiting for read... Thread-3 waiting for read... Thread-4 waiting for read... Thread-5 waiting for write... Thread-6 waiting for write... Thread-4 reads data: AAAAAAAAAA Thread-3 reads data: AAAAAAAAAA Thread-2 reads data: AAAAAAAAAA Thread-1 reads data: AAAAAAAAAA Thread-0 reads data: AAAAAAAAAA Thread-5 wrote data: EEEEEEEEEE Thread-6 wrote data: MMMMMMMMMM Thread-1 waiting for read... Thread-4 waiting for read... Thread-1 reads data: MMMMMMMMMM Thread-4 reads data: MMMMMMMMMM Thread-2 waiting for read... Thread-2 reads data: MMMMMMMMMM Thread-0 waiting for read... Thread-0 reads data: MMMMMMMMMM Thread-4 waiting for read... Thread-4 reads data: MMMMMMMMMM Thread-2 waiting for read... Thread-5 waiting for write... Thread-2 reads data: MMMMMMMMMM Thread-5 wrote data: GGGGGGGGGG Thread-6 waiting for write... Thread-6 wrote data: AAAAAAAAAA Thread-3 waiting for read... Thread-3 reads data: AAAAAAAAAA ...... 可以看到,每次读/写都是完整的原子操作,因为我们每次写入的都是10个相同字符。并且,每次读出的都是最近一次写入的内容。 如果去掉ReadWriteLock: package com.crackj2ee.thread; public class DataHandler { // store data: private char[] buffer = "AAAAAAAAAA".toCharArray(); public char[] read(String name) throws InterruptedException { char[] data = doRead(); System.out.println(name + " reads data: " + new String(data)); return data; } public void write(String name, char[] data) throws InterruptedException { System.out.println(name + " wrote data: " + new String(data)); doWrite(data); } private char[] doRead() { char[] ret = new char[10]; for(int i=0; i<10; i++) { ret[i] = buffer[i]; sleep(3); } return ret; } private void doWrite(char[] data) { for(int i=0; i<10; i++) { buffer[i] = data[i]; sleep(10); } } private void sleep(int ms) { try { Thread.sleep(ms); } catch(InterruptedException ie) {} } } 运行结果如下: Thread-5 wrote data: AAAAAAAAAA Thread-6 wrote data: MMMMMMMMMM Thread-0 reads data: AAAAAAAAAA Thread-1 reads data: AAAAAAAAAA Thread-2 reads data: AAAAAAAAAA Thread-3 reads data: AAAAAAAAAA Thread-4 reads data: AAAAAAAAAA Thread-2 reads data: MAAAAAAAAA Thread-3 reads data: MAAAAAAAAA Thread-5 wrote data: CCCCCCCCCC Thread-1 reads data: MAAAAAAAAA Thread-0 reads data: MAAAAAAAAA Thread-4 reads data: MAAAAAAAAA Thread-6 wrote data: EEEEEEEEEE Thread-3 reads data: EEEEECCCCC Thread-4 reads data: EEEEEEEEEC Thread-1 reads data: EEEEEEEEEE 可以看到在Thread-6写入EEEEEEEEEE的过程中,3个线程读取的内容是不同的。
转载请注明原文地址: https://www.6miu.com/read-5051173.html

最新回复(0)