Java锁的使用方法

介绍

这篇文章将为大家详细讲解有关Java锁的使用方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

<强> Java锁的使用方法:

<强> 1锁的对象和范围

<李>

缩小粒度
癑ava锁的使用方法”
癑ava锁的使用方法"

<强> 2锁的对象本身大小

<李>

减少空间占用
癑ava锁的使用方法”
原子长V。年代长
前者是个对象,包含对象头(对象头)以保存hashcode、锁等信息,64位系统下占16字节,64位系统下:

<李>

挥发性长=8字节

<李>

AtomicLong=8个字节(挥发性)+ 16字节(对象头)+ 8个字节(引用)=32个字节
至少节约24字节!

所以原子*对象=凡ǘ饕嘈?静态原子* FieldUpdater

<强> 3锁的速度

提高并发性

<强> LongCounter

记录内存分配字节数等功能用到的。
高并发下:java.util.concurrent.atomic。AtomicLong=比;java.util.concurrent.atomic。LongAdder
癑ava锁的使用方法"

结论:及时衡量,使用JDK最新的功能

<强>根据不同情况,选择不同的并发包实现

JDK<1.8考虑ConcurrentHashMapV8 (ConcurrentHashMap在jDK8中的版本)
癑ava锁的使用方法"

<强> 4不同场景选择不同的并发类

因需而变

<李>

关闭和等待关闭事件执行器(事件执行者):
对象。等待/通知=稢ountDownLatch
癑ava锁的使用方法"

<李>

Nio事件循环中负责存储的任务队列
Jdk的LinkedBlockingQueue (MPMC,多生产者多消费者)→jctools”MPSC
io.netty.util.internal.PlatformDependent.Mpsc # newMpscQueue (int):
癑ava锁的使用方法”
癑ava锁的使用方法"

<强> 5锁的价值

能不用则不用
网状的应用场景下:局部串行+整体并行祝辞——个队列+多个线程模式:
降低用户开发难度,逻辑简单,提升处理性能
避免锁带来的上下文切换和并发保护等额外开销

避免用锁:用ThreadLocal来避免资源争用,例如网状的轻量级的线程池实现
癑ava锁的使用方法"

Java锁的使用方法