读写分离之小小Demo

说一下为什么要写这个。在这里要感谢我的老师,这篇文章是在看他讲的kafka源码中学到的一个小东西。想要学习的同学可以关注西瓜老师爱大数据

在kafka源码Producer中,有一段提高性能的设计,其中用到Conllections中的unmodifiableMap,由于我是一个菜鸟,所以不做过多的讲解,想要了解的同学,可以自行参阅相关知识点。

该设计适用于读多写少的场景。实现方式为读写分离


首先看下类的内容

在该类中的Map被volatile修饰,其作用是线程可见,即在多条线程下,其一修改了map的值,其他线程立即可见。

下面看如何实现读写分离

读写分离之小小Demo_第1张图片

简单了解下unmodidiableMap,该方法unmodifiableMap m> 位于java.util包下,作用为返回一个不可被修改的视图。在图中,putItem方法被synchronized修饰,所以是线程安全的,由于设计是读写分离的,所以getValue不需要加锁也是线程安全的。

最后是测试结果:

读写分离之小小Demo_第2张图片

输出结果顺序可能会有不同,不用担心。

报错语句为:

报错的原因已经提到过,是因为map已经变为不可修改的,但是可以对其value进行修改。

End:记第一次写文章的感受,一入编程深似海,太多的不懂,在崩溃的边缘疯狂试探,既然不能抽身,那就溺死在知识的海洋,不积跬步,何以至千里,大家共勉。

你可能感兴趣的:(读写分离之小小Demo)