多线程与高并发
qq_42026177
这个作者很懒,什么都没留下…
展开
-
CAS(无锁优化 自旋 乐观锁)
CAS(无锁优化 自旋 乐观锁)原子操作:原子操作类: 原子操作: Compare And Set cas(V,Expected,NewValue) 在执行原子操作时,会先去比较一下操作的对象,如果取到的对象和期望对象的值是一致的(意味着值没有被其他线程更改),则进行set操作,将newValue赋值进去;否则(意味着值已经被其他线程更改过)重试或者操作失败 -cpu原语支持,即执行的过程不会被打断。 **ABA问题:**即在进行原子操作的时候,其中V被另一个线程set多次,但是其中一次的操作之后正好满足此原创 2020-08-27 09:27:25 · 160 阅读 · 0 评论 -
synchronized关键字
synchronized关键字 锁的状态: 无锁状态 偏向锁:Mark Word记录里存储锁偏向的线程ID,其实没有有锁,只是加了一个标记。 轻量级锁:如果线程争用,则升级为自旋锁(类似于while true)。 重量级锁:自旋锁默认自旋10次后,还未得到锁,就升级为重量级锁(去os申请资源来加锁)。 Ps:锁只能升级不能降级。 自旋锁,其实是要占用cpu的,而重量级锁是不占用cpu的,其他的线程其实是进入了等待队列中,等待cpu换新分配资源; 故: 故执行时间长(加锁代码)及线程数比较多的用系统锁,原创 2020-08-16 23:26:50 · 99 阅读 · 0 评论 -
volatile关键字
volatile的应用 在多线程并发编程中synchronized和volatile都扮演着重要的角色,volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。如果volatile变量修饰符使用恰当的话,它比synchronized的使用和执行成本更低,因为它不会引起线程上下文的切换和调度。 volatile的特点 保证线程可见性 禁止指令重排序 细节从案例代码观察;在这个demo中,虽原创 2020-08-16 23:22:37 · 58 阅读 · 0 评论 -
创建线程的三种方式
这里写自定义目录标题创建线程 创建线程 ```java public class HowToCreateThread { static public class MyThread extends Thread { @Override public void run() { // TODO 自动生成的方法存根 System.out.println("Hello MyThread"); } } static public class MyRun implements Ru原创 2020-08-16 23:08:31 · 72 阅读 · 0 评论