当前位置:   article > 正文

当被面试官问到:JUC并发编程——读写锁 ReadWriteLock

当被面试官问到:JUC并发编程——读写锁 ReadWriteLock

获得条件

排他性

作用

读锁

写锁未被任意线程持有

对读线程是共享的,对写线程是排他的

允许多个读线程可以同时读取共享数据,保证在读共享数据时,没有其他线程对共享数据进行修改

写锁

该写锁未被其他线程持有,并且相应的读锁也未被其他线程持有

对读线程或者写线程都是排他的

保证写线程以独占的方式修改共享数据

2、ReadWriteLock 使用

==================

模拟缓存数据的写入和读取

不加读写锁的情况

package com.cheng.rw;

import java.util.HashMap;

import java.util.Map;

public class ReadWriteLock {

public static void main(String[] args) {

MyCache myCache = new MyCache();

//写操作

for (int i = 0; i < 5; i++) {

final int temp = i;

new Thread(()->{

myCache.set(temp+“”,temp+“”);

},String.valueOf(i)).start();

}

//读操作

for (int i = 0; i < 5; i++) {

final int temp = i;

new Thread(()->{

myCache.get(temp+“”);

},String.valueOf(i)).start();

}

}

}

class MyCache{

private volatile Map<String,Object> map = new HashMap<>();

//写操作

public void set(String key,Object value){

System.out.println(Thread.currentThread().getName()+“写入了”+key);

map.put(key,value);

System.out.println(Thread.currentThread().getName()+“写入操作完成”);

}

//读操作

public void get(String key){

System.out.println(Thread.currentThread().getName()+“读取了”+key);

Object o = map.get(key);

System.out.println(Thread.currentThread().getName()+“读取操作完成”);

}

}

运行查看结果:

不加读写锁,当前线程在进行写入操作时被其他线程插队。

加上读写锁

package com.cheng.rw;

import java.util.HashMap;

import java.util.Map;

import java.util.concurrent.locks.ReentrantReadWriteLock;

public class ReadWriteLock {

public static void main(String[] args) {

MyCacheLock myCache = new MyCacheLock();

//写操作

for (int i = 0; i < 5; i++) {

final int temp = i;

new Thread(()->{

myCache.set(temp+“”,temp+“”);

},String.valueOf(i)).start();

}

//读操作

for (int i = 0; i < 5; i++) {

final int temp = i;

new Thread(()->{

myCache.get(temp+“”);

},String.valueOf(i)).start();

}

}

}

class MyCacheLock{

private volatile Map<String,Object> map = new HashMap<>();

Kafka实战笔记

关于这份笔记,为了不影响大家的阅读体验,我只能在文章中展示部分的章节内容和核心截图

image.png

  • Kafka入门
  • 为什么选择Kafka
  • Karka的安装、管理和配置

image.png

  • Kafka的集群
  • 第一个Kafka程序
  • image.png

afka的生产者

image.png

  • Kafka的消费者
  • 深入理解Kafka
  • 可靠的数据传递

image.png

image.png

  • Spring和Kalka的整合
  • Sprinboot和Kafka的整合
  • Kafka实战之削峰填谷
  • 数据管道和流式处理(了解即可)

image.png

  • Kafka实战之削峰填谷

image.png

QJYz-1714697766896)]

  • Spring和Kalka的整合
  • Sprinboot和Kafka的整合
  • Kafka实战之削峰填谷
  • 数据管道和流式处理(了解即可)

[外链图片转存中…(img-n5ooxyi0-1714697766897)]

  • Kafka实战之削峰填谷

[外链图片转存中…(img-aY2xCHme-1714697766897)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/956197
推荐阅读
相关标签
  

闽ICP备14008679号