随笔分类 -  JUC

并发包
摘要:java内存模型中,每个线程有自己的工作内存,同时还有一个共享的主内存。 为什么要让每个线程都有自己的工作内存呢? 线程运行的代码对应的是一些指令是由CPU执行的!但是CPU每次执行指令运算的时候,要是每次需要一个变量的值,都从主内存加载,性能会比较差! 要是线程的代码在执行过程中,就可以直接从自己 阅读全文
posted @ 2019-10-04 21:23 Jemb 阅读(181) 评论(0) 推荐(0)
摘要:我们可以利用synchronized关键字来对程序进行加锁。它既可以用来声明一个synchronized代码块,也可以直接标记静态方法或者实例方法。 synchronized怎么实现线程的同步? 早期的synchronized属于重量级锁,依赖于mutex lock实现,线程之间的切换涉及到 用户态 阅读全文
posted @ 2019-10-04 18:03 Jemb 阅读(266) 评论(0) 推荐(0)
摘要:CAS: 如果多个线程想对 count 变量进行自增操作,最先想到的是使用synchronized。 初步方案: 虽然随着Java版本更新,也对synchronized做了很多优化(偏向锁,轻量级锁),但是处理这种简单的累加操作,仍然显得“太重了”。多个线程使用synchronized,不就相当于让 阅读全文
posted @ 2019-10-02 10:28 Jemb 阅读(378) 评论(0) 推荐(0)
摘要:包含以下5个部分: 1.Tools 工具:(CountDownLatch,CyclicBarrier,Semaphore,Executors,Exchange) 2.Lock :(ReentrantLock,Condition) 3.Atomic :(AtomicInteger,AtomicBool 阅读全文
posted @ 2019-09-29 23:25 Jemb 阅读(261) 评论(0) 推荐(0)
摘要:ReentrantLock内部包含了一个AQS对象,也就是AbstractQueuedSynchronizer类型的对象。这个AQS对象就是ReentrantLock可以实现加锁和释放锁的关键性的核心组件。 线程A,B尝试进行加锁的过程: CountDownLatch应用场景:线程协调使用的时减法操 阅读全文
posted @ 2019-09-29 23:04 Jemb 阅读(204) 评论(0) 推荐(0)