国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - Java多線程之讀寫鎖分離設(shè)計(jì)模式

Java多線程之讀寫鎖分離設(shè)計(jì)模式

2022-03-04 17:52冬日毛毛雨 Java教程

這篇文章主要介紹了Java多線程讀寫鎖分離設(shè)計(jì)模式,主要利用Java到嗎完成read read 并行化、read write 不允許、write write 不允許幾項(xiàng)任務(wù),需要的朋友可以參考一下

主要完成任務(wù):

  • 1.read read 并行化
  • 2.read write 不允許
  • 3.write write 不允許
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class ReaderWorker extends Thread {
 
    private final SharedData data;
 
    public ReaderWorker(SharedData data) {
        this.data = data;
    }
 
    @Override
    public void run() {
        while (true) {
            try {
                char[] readBuf = data.read();
                System.out.println(Thread.currentThread().getName() + " reads " + String.valueOf(readBuf));
 
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
 
        }
    }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
public class ReadWriteLock {
 
    /**
     * 當(dāng)前有幾個(gè)線程 在對(duì)它進(jìn)行讀操作
     */
    private int readingReaders = 0;
    /**
     * 當(dāng)前有幾個(gè)線程 等待讀操作
     */
    private int waitingReaders = 0;
 
    /**
     * 當(dāng)前有幾個(gè)線程 正在寫操作
     */
    private int writingWriters = 0;
    /**
     * 當(dāng)前有幾個(gè)線程 正在寫操作
     */
    private int waitingWriters = 0;
 
    /**
     * 偏向于寫
     */
    private boolean preferWriter = true;
 
    public ReadWriteLock() {
        this(true);
    }
 
    public ReadWriteLock(boolean preferWriter) {
        this.preferWriter = preferWriter;
    }
 
    public synchronized void readLock() throws InterruptedException {
        this.waitingReaders++;
        try {
            /**
             * 讓寫的線程先運(yùn)行
             */
            while (writingWriters > 0||(preferWriter&&waitingWriters>0)) {
                this.wait();
            }
            this.readingReaders++;
        } finally {
            this.waitingReaders--;
        }
    }
 
    public synchronized void readUnLock() {
        this.readingReaders--;
        this.notifyAll();
    }
 
    public synchronized void writeLock() throws InterruptedException {
        this.waitingWriters++;
        try {
 
            while (readingReaders > 0 || writingWriters > 0) {
                this.wait();
            }
 
            this.writingWriters++;
        } finally {
            this.waitingWriters--;
        }
    }
 
    public synchronized void writeUnlock() {
        this.writingWriters--;
        this.notifyAll();
    }
}
 
 
 
public class SharedData {
 
    private final char[] buffer;
    private final ReadWriteLock lock = new ReadWriteLock();
 
    public SharedData(int size) {
        this.buffer = new char[size];
        for (int i = 0; i < size; i++) {
            this.buffer[i] = '*';
        }
    }
 
    public char[] read() throws InterruptedException {
        try {
            lock.readLock();
            return this.doRead();
        } finally {
            lock.readUnLock();
        }
    }
 
    public void write(char c) throws InterruptedException {
        try {
            lock.writeLock();
            this.doWrite(c);
        } finally {
            lock.writeUnlock();
        }
    }
 
    private void doWrite(char c) {
        for (int i = 0; i < buffer.length; i++) {
            buffer[i] = c;
            slowly(10);
        }
    }
 
    private char[] doRead() {
        char[] newBuf = new char[buffer.length];
        for (int i = 0; i < buffer.length; i++) {
            newBuf[i] = buffer[i];
        }
        slowly(50);
        return newBuf;
    }
 
    private void slowly(int millisecond) {
        try {
            Thread.sleep(millisecond);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public class WriterWorker extends Thread {
 
    private static final Random random = new Random(System.currentTimeMillis());
 
    private final SharedData data;
    private final String filter;
 
    private int index = 0;
 
    public WriterWorker(SharedData data, String filter) {
        this.data = data;
        this.filter = filter;
    }
 
    @Override
    public void run() {
 
        try {
 
            while (true) {
                char c = nextChar();
 
                data.write(c);
 
                Thread.sleep(random.nextInt(1000));
 
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
 
    private char nextChar() {
 
        char c = filter.charAt(index);
        index++;
        if (index >= filter.length())
            index = 0;
        return c;
    }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
 *
 * ReadWriteLock
 */
public class ReadWriteLockClient {
    public static void main(String[] args) {
        final  SharedData sharedData = new SharedData(10);
 
        new ReaderWorker(sharedData).start();
        new ReaderWorker(sharedData).start();
        new ReaderWorker(sharedData).start();
        new ReaderWorker(sharedData).start();
        new ReaderWorker(sharedData).start();
        new WriterWorker(sharedData,"123456").start();
        new WriterWorker(sharedData,"abcdef").start();
    }
}

結(jié)果:

Thread-0 reads **********
Thread-1 reads **********
Thread-2 reads **********
Thread-3 reads **********
Thread-1 reads aaaaaaaaaa
Thread-3 reads aaaaaaaaaa
Thread-0 reads aaaaaaaaaa
Thread-2 reads aaaaaaaaaa
Thread-1 reads aaaaaaaaaa
Thread-2 reads aaaaaaaaaa
Thread-0 reads aaaaaaaaaa
Thread-3 reads aaaaaaaaaa
Thread-1 reads aaaaaaaaaa
Thread-3 reads aaaaaaaaaa
Thread-0 reads aaaaaaaaaa
Thread-2 reads aaaaaaaaaa
Thread-2 reads aaaaaaaaaa
Thread-0 reads aaaaaaaaaa
Thread-1 reads aaaaaaaaaa
Thread-3 reads aaaaaaaaaa
Thread-2 reads aaaaaaaaaa
Thread-0 reads aaaaaaaaaa
Thread-1 reads aaaaaaaaaa
Thread-3 reads aaaaaaaaaa
Thread-0 reads bbbbbbbbbb
Thread-1 reads bbbbbbbbbb
Thread-2 reads bbbbbbbbbb
Thread-3 reads bbbbbbbbbb
Thread-0 reads bbbbbbbbbb
Thread-1 reads bbbbbbbbbb
Thread-3 reads bbbbbbbbbb
Thread-2 reads bbbbbbbbbb
Thread-0 reads bbbbbbbbbb
Thread-1 reads bbbbbbbbbb
Thread-2 reads bbbbbbbbbb
Thread-3 reads bbbbbbbbbb
Thread-0 reads bbbbbbbbbb
Thread-1 reads bbbbbbbbbb
Thread-3 reads bbbbbbbbbb
Thread-2 reads bbbbbbbbbb
Thread-1 reads 3333333333
Thread-2 reads 3333333333
Thread-3 reads 3333333333
...... 省略

到此這篇關(guān)于Java多線程之讀寫鎖分離設(shè)計(jì)模式的文章就介紹到這了,更多相關(guān)Java多線程 讀寫鎖分離內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://juejin.cn/post/7021759134072569887

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91在线观 | 亚洲国产精品一区二区三区 | 黄色三级网站在线观看 | 亚洲欧美一区二区三区在线 | 日韩av一级片 | 日韩在线观看中文字幕 | 黄视频在线播放 | 欧美一级做a爰片久久高潮 免费在线毛片 | 看毛片网 | 九九在线国产视频 | 精品伊人| 久热官网| 亚洲一区中文字幕在线观看 | 婷婷精品久久久久久久久久不卡 | 欧美不卡在线 | 这里只有精品久久 | 中文字幕日韩欧美 | 中文字幕在线观看一区二区三区 | 国产区在线| 国产精品一区二区久久久 | 精品久久久久久久久久久久久久 | 亚洲综合区 | 91精品视频免费在线观看 | 亚洲视频自拍 | 亚洲视频在线一区 | 影音先锋网址 | 成人黄色在线 | 福利在线小视频 | 韩国精品 | 夜夜爽av福利精品导航 | 中文字幕色站 | 一级毛片免费完整视频 | 四虎久久 | 国产在线一区二区 | 欧美一区二区三区 | 久久国产精品久久喷水 | 欧美特级 | 日韩欧美一区二区三区免费观看 | 亚洲一区三区 | 懂色av中文字幕一区二区三区 | 欧美成人免费在线 |