
并发
catnoiofjz
这个作者很懒,什么都没留下…
展开
-
LockSupport使用例子
LockSupport普通例子:public class LockSupportPark { public static void main(String[] args) throws InterruptedException { Thread t = new Thread(new Runnable() { public void run()...原创 2020-05-05 21:11:50 · 200 阅读 · 0 评论 -
Thread.join使用场景
Thread.join使用场景:如下例子,有一个任务需要花10秒才完成,现可分2个线程各做一半任务,2个线程同时跑,5秒后即可完成任务并得到结果。所以join可应用于,需要多线程执行任务以减少主线程花费时间的场景。public class ThreadJoin { public static void main(String[] args) throws Interrupte...原创 2020-04-30 23:35:20 · 464 阅读 · 0 评论 -
synchronized锁的5种状态
synchronized用的锁是存在java对象头中,上锁,改变的就是对象头。synchronized锁有5种状态:无锁,偏向锁,轻量级锁,重量级锁,GC标志信息。0.java应用启动的时候会有多个系统自带的线程执行synchronized代码块,必然会导致由偏向锁升级为轻量级锁,为了避免升级所带来额外的开销, 此时jvm会关闭偏向锁,直接使用轻量级锁,默认等待4秒后再开启偏向锁,可用...原创 2020-04-29 22:45:46 · 2221 阅读 · 0 评论 -
WaitNotifyAll消费者和生产者
//wait和notifyall不能独立使用,一定要配合synchronized一起使用。//notify只会随机唤醒一个线程,如果操作不当可能其他线程永远都不会唤醒,所以用notifyall安全点。public class WaitNotifyAll { //用来加锁的对象 static Object o = new Object(); //存储数据队列 s...原创 2020-04-28 14:40:36 · 134 阅读 · 0 评论 -
cas(Conmpare And Swap)与aba
cas(Conmpare And Swap)比较和交换算法例子:对int i = 0;进行i++操作。1.读取数据i为02.对0自增后得到数值13.比较i的值是否还是原来的04.是的话把i赋值为1类似于数据库乐观锁update myTable set i = i + 1 where i = 0;所以3和4步必须要同时执行,要有原子性。比如AtomicInteger就使用了cas算...原创 2020-04-26 18:44:11 · 367 阅读 · 0 评论 -
CyclicBarrier例子
public class CyclicBarrierTest { public static void main(String[] args) throws Exception { final CyclicBarrier cyclicBarrier = new CyclicBarrier(11); new Thread(new Runnable() { ...原创 2020-04-18 23:28:04 · 155 阅读 · 0 评论 -
CountDownLatch例子
public class CountDownLatchTest { public static void main(String[] args) throws InterruptedException { final CountDownLatch countDownLatch = new CountDownLatch(10); new Thread(new...原创 2020-04-17 18:14:00 · 144 阅读 · 0 评论 -
使用AtomicBoolean和synchronized实现只初始化一次的操作
public class Test { private AtomicBoolean atomicBoolean = new AtomicBoolean(false); private boolean isInit = false; //输出: //1:init //2:init public void init(int i){ if...原创 2018-04-28 23:46:51 · 1417 阅读 · 0 评论