
线程安全
文章平均质量分 72
L.Z.hao.
这个作者很懒,什么都没留下…
展开
-
(四)生产者消费者模式
(一)生产者消费者模式原理: 在一个系统中,存在生产者和消费者两种角色,他们通过内存缓冲区进行通信,生产者生产消费者需要的资料,消费者把资料做成产品。生产消费者模式如下图: (二)代码实现 生产者是一堆线程,消费者是另一堆线程,内存缓冲区可以使用List数组队列,数据类型只需要定义一个简单的类就好。最关键就是内存缓冲区为空的时候消费者必须等待,而内存缓冲区满的时候,生产者必须等待。其他时候可以是个动态平衡: 首先设置Market类: 其中变量有:Max(仓库最大值),List(用于存放数据) 方法有原创 2022-04-08 15:19:31 · 9658 阅读 · 2 评论 -
(三)线程锁-Synchronized与ReentrantLock的区别
(一)ReentrantLock: 位于java.util.concurrent.locks包 和CountDownLatch,FutureTask,Semaphore一样基于AQS实现 可以实现比Synchronized更细的控制,如控制公平性 调用Lock()后,必须调用unlock()释放锁 性能未必比Synchronized,也是可重入 ReentrantLock公平性的设置 格式:ReentrantLock fairLock=new ReentrantLock(true) 参数为true时,原创 2022-03-29 15:09:30 · 349 阅读 · 0 评论 -
(二)线程锁-synchronized的底层原理与实现
(一)Synchronized在对象中的实现 实现Synchronized的基础:java对象头,Monitor 对象在内存中的布局:1:对象头,2:示例数据,3:对齐填充 其中对象头的结构为: 1:Mark word:默认存储对象的hashCode,分代年龄,锁类型,锁标志位等 2:Class Metadata Address:类型指针对象的类元数据,虚拟机通过这个指针确定该对象是哪个类的数据。 Monitor:每个java对象天生带了一把隐形锁 Monitor中的三个队列:EntryLis原创 2022-03-29 14:14:18 · 393 阅读 · 0 评论 -
(一)线程安全问题-线程锁(synchronized的使用)
(一)线程安全问题诱因 存在有共享数据 存在有多个线程访问这些共享数据 解决方法:同一时刻共享数据只能由一个线程访问,其他线程要等到该线程处理完共享数据后才能对该线程进行操作 (二)线程锁-synchronized 线程锁的两个特性 互斥性:同一时间只能有一个对象持有线程锁,通过这种特性实现多线程的协调机制。同一时间只有一个线程对需要同步的代码块进行访问,也成为原子性 可见性:必须确保在锁释放之前,其对于共享变量的修改对下一个获得该锁的线程是可见的,否则另一个线程可能是在本地缓存的某个副本上进行,原创 2022-03-24 17:14:11 · 8131 阅读 · 2 评论