多线程
qq_45910900
这个作者很懒,什么都没留下…
展开
-
线程间的通信
什么是等待通知机制 在单线程中,要执行的操作需要满足一定的条件才能执行,可以把这个操作放在if语句块中 在多线程编程中,可能线程a条件没有满足只是暂时的,稍后其他的线程可能会更新这个条件,使得a线程的条件满足,可以将a线程暂停,知道它的条件满足后再将a线程唤醒。等待/通知机制实现Object 类中的wait()方法可以使执行当前代码的线程等待,暂停执行,直到接到通知或被中断为止。注意:伪代码://在调用wait()方法前获得对象内部的锁synchronized(锁对象){原创 2022-06-07 16:53:03 · 62 阅读 · 0 评论 -
CAS问题
CAS(Compare And Swap)是由硬件实现的。CAS可以将读 改 写 这类的操作转换为原子操作 这个问题是当绿色线程走到第二步,还没有到第三步。此时蓝线程开始了第一步,这样这个变量的期待值不是12 而是11.......原创 2022-06-06 11:32:31 · 151 阅读 · 0 评论 -
轻量级同步机制:volatile关键字
volatile的作用 可以强制让线程从公共内存中读取,而不是从工作内存读取。 volatile非原子性原创 2022-05-27 12:04:37 · 135 阅读 · 0 评论 -
内部锁:synchronized关键字
java中每个对象都有一个与之关联的内部锁()这个锁是排他锁,保证了原子性,有序性。 使用的时候可以在代码块上,方法上。经常使用this当前对象作为锁对象,也可以用一个常量对象作为锁对象。锁对象不同就不能同步。无论在哪个地方上用synchronized,只要锁对象相同,就能同步。 ...原创 2022-05-27 10:16:11 · 57 阅读 · 0 评论 -
线程的锁相关
线程同步机制可以保障线程安全 java平台提供了的线程同步机制包括:锁,volatile关键字,final关键字,static关键字,以及相关的API,如object.wait() object.notify等 锁 线程安全问题产生的前提是多个线程并发访问共享数据 将多个线程对共享数据的并发访问转换为串行访问,即一个共享数据一次只能被一个线程访问,锁就是复用这种思路来保障线程安全的 锁(Lock)可以理解为对共享数据进行保护的一个许可证,对于同一个许可证保护的共享数据来说,任何线程想要访问这些共享原创 2022-05-24 14:10:08 · 90 阅读 · 0 评论 -
JAVA的内存模型
注:图片摘自动力节点原创 2022-05-20 09:50:44 · 106 阅读 · 0 评论 -
线程安全问题
非线程安全主要是指多个线程对同一个对象的实例变量进行操作时,会出现值被更改,值不同步的情况。 线程安全问题表现为三个方面:原子性,可见性和有序性 原子性 原子就是不可分割的意思,原子操作的不可分割有两层含义: 访问(读,写)某个共享变量的操作从其他线程来看该操作要么已经执行完毕,要么尚未发生,即其他线程看不到当前操作的中间结果 访问同一组共享变量的原子操作是不能够交错的 java有两种方式实现原子性:一种是使用锁;另一种利用处理器的CAS指令 。锁具有排它性,保证共享变量在某一时刻只能被一个线程访原创 2022-05-08 15:11:27 · 155 阅读 · 0 评论