- 博客(4)
- 问答 (1)
- 收藏
- 关注
原创 多线程基础04_cas_unsafe
cas compare and swap 即比较再交换的意思。也称无锁优化、自旋锁(自旋就是在哪循环)、乐观锁。 cas(v,expectValue,newValue) v:内存值,expectValue:期望值,newValue :新值 ①if(v==expectValue){ ② v=newValue }else{ tryCasAgain or fail } 意思是进行cas操作时,如果内存值v等于期望值expectValue 那么将内存值改为新值newValue,否则再次调用cas,..
2020-09-03 12:12:55
105
1
原创 多线程基础03_volatile
volatile 两个特性 1、保证线程可见。 2、禁止指令重排序。 一、保证线程可见例子 public class T { volatile boolean running = true; void m(){ System.out.println("m start"); while (running){ } System.out.println("m end"); } public st
2020-08-28 15:41:38
141
原创 多线程基础02_synchnorized_及锁升级
synchnorized ,多线程对同一资源进行读写操作,会出现数据不一致的问题,为了保证线程安全,需要同步代码块。 synchnorized 锁 是可重入锁,当前线程获得锁,并且后面操作也是需要同样的锁时,锁可以重入,就是锁+1 +1,-1,-1。 锁的是对象,不是锁代码块,拿到锁的线程才能执行同步代码块,拿不到锁的线程等待锁释放,获得锁。 java对象的结构 可以看转载文章Java对象结构与锁实现原理及MarkWord详解,其中是使用对象结构中的对象头里的markword进行标识对象的线程锁状态。
2020-08-28 11:53:48
257
原创 多线程基础01_sleep_yield_join
Thread.sleep 当前线程离开cpu 让给其他的线程执行。 Thread.yield 把当前线程放到就绪队列,与其他线程一起竞争cpu,有可能是其他线程获取cpu执行权,也有可能是当前线程获取。 t2.join 将其它线程加入到当前线程来执行,等join的线程执行结束再执行,例如 t1里执行 t2.join(),那么t1将会等t2执行结束后再执行。 ...
2020-08-20 15:03:29
118
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人