Java线程
文章平均质量分 78
Java线程相关知识
楠佩忆心轩
这个作者很懒,什么都没留下…
展开
-
Java中的锁
轻量级锁锁的程度位于偏向锁和重量级锁中间,当线程获取轻量级锁对象失败后,线程不会阻塞,而是会采用CAS+自旋的方式尝试再次获取锁对象,直到自旋次数达到阈值,就会发生锁的膨胀,将锁升级为重量级锁。非公平锁中当一个线程获取锁对象时,都会先尝试获取锁对象,如果失败了就将请求放入队列当中,如果获取锁对象成功后,就会执行获取到锁对象的线程,不论请求队列中是否存在其他请求,是一种非公平的获取方式,每个请求在放入队列之前都有尝试的机会。互斥锁只有两种状态,相比于互斥锁,读写锁的状态比较多,维护起来不方便。原创 2023-09-10 19:00:00 · 203 阅读 · 0 评论 -
CAS策略
存在两个线程A和B都获取共享变量的值作为期望值,此时线程B先进行CAS操作,将共享变量从A改为B,线程B再一次进行CAS操作,将共享变量从B改为A,此时线程A使用期望值和共享变量进行判断,虽然是相等的,但是线程A此时的期望值已经不是共享变量的最新值,线程A并不知道,其在获取期望值到进行比较的过程中共享变量发生了几次变化,虽然操作的结果是正确的,但是并不知道迭代了几个版本,于是就出现了ABA问题。指的是一个线程获取到的期望值即使和共享变量的值相等,但是此时的期望值却不是最新的值。原创 2023-09-06 17:00:00 · 138 阅读 · 0 评论 -
Java---多线程
Java中使用volatile关键字可以确保在多线程环境下共享数据的可见性,其原理是在对数据进行读操作时会先去主存当中读取数据,将数据读取到缓存当中,再从缓存中读取数据,写操作也是一样,会直接将数据的结果写入到缓存当中区,在从缓存将数据写入到主存当中,这种操作相当于牺牲了一部分缓存来换取共享数据的可见性。 Java内存模型中规定所有的变量都存放在主内存当中,当存在线程对变量进行操作时,会将变量进行复制,变为变量副本存储在工作内存当中,从而对工作内存中的变量副本进行操作,每个线程的工作内存是独立的。原创 2023-09-04 15:45:00 · 96 阅读 · 0 评论