多线程
cullinan_real
靡不有初鲜克有终
展开
-
1. 多线程学习笔记(01 | 可见性、原子性和有序性问题:并发编程Bug的源头)
CPU 增加了缓存,以均衡与内存的速度差异;操作系统增加了进程和线程,以分时复用CPU,进而均衡CPU和IO设备编译程序优化指令执行次序,使得缓存能够得到更加合理地利用。...原创 2019-03-30 07:29:24 · 128 阅读 · 0 评论 -
【Guava】使用Guava的RateLimiter做限流
https://blog.csdn.net/aa1215018028/article/details/80866335转载 2019-05-27 09:44:42 · 235 阅读 · 0 评论 -
关于线程池
实际是使用生产者-消费者模式。线程池的使用方式生产者,线程池本身是消费者。生产者决定了消费额度,消费者负责按一定机制(FIFO)消费。尽量使用ThreadPoolExecutor来创建线程池,参数如下:1. int corePoolSize2. int maximumPoolSize3. long keepAliveTime4. TimeUnit unit6. B...原创 2019-05-05 09:30:00 · 167 阅读 · 0 评论 -
Java8 读写锁的改进:StampedLock(高性能读写锁!)
https://blog.csdn.net/sunhaoning/article/details/68924625https://www.cnblogs.com/ten951/p/6590579.html StampedLock是Java8引入的一种新的所机制,简单的理解,可以认为它是读写锁的一个改进版本,读写锁虽然分离了读和写的功能,使得读与读之间可以完全并发,但是读和写之...转载 2019-04-29 09:03:38 · 720 阅读 · 1 评论 -
java中ReentrantReadWriteLock读写锁的使用
读写锁:分为读锁和写锁,多个读锁不互斥,读锁与写锁互斥,这是由jvm自己控制的,你只要上好相应的锁即可。如果你的代码只读数据,可以很多人同时读,但不能同时写,那就上读锁;如果你的代码修改数据,只能有一个人在写,且不能同时读取,那就上写锁。总之,读的时候上读锁,写的时候上写锁!ReentrantReadWriteLock会使用两把锁来解决问题,一个读锁,一个写锁1、线程进入读锁的前提条件:...转载 2019-04-23 20:00:16 · 529 阅读 · 0 评论 -
关于synchronized锁和可重入锁
JAVA SDK并发报,最核心的便是对管程的实现。并发领域的两大问题,互斥和同步:互斥:同一时刻只允许一个线程访问共享资源,使用Lock解决。同步:线程之间如何通信,协作?使用Condition解决。这两个关键字与synchronized的区别?synchronized没办法解决《破坏不可抢占条件》,原因是synchronized申请资源如果申请不到,则线程直接进入阻塞状...原创 2019-04-23 09:31:08 · 979 阅读 · 0 评论 -
CountDownLatch 和CyclicBarrier的区别
区别点 CountDownLatch CyclicBarrier 概念 一个线程(或者多个), 等待另外N个线程完成某个事情之后才能执行。 N个线程相互等待,任何一个线程完成之前,所有的线程都必须等待。 强调点 重点在那《一个主线程》,他来协调其他N个线程执行完以后,主线程在做点其他的事 重点是那N个线程,他们之间任何一个没有完成,所有的线程都必须等待...原创 2019-04-26 20:23:32 · 1885 阅读 · 0 评论 -
关于JUC的Semaphore信号量的原理和示例
信号量的很好的源码解析:Semaphore信号量的原理和示例信号量,1、如果只有1个大小的话,有点类似生活中的红绿灯。当你执行前,看下只有绿灯的时候,才允许执行,否则等待。2、如果有N个大小的话,就类似银行的人工窗口,假设有20个人在等待3个窗口,则只有存在空闲窗口的时候, 才可以去一个人去办业务;而且只有有一个办完业务,释放了一个窗口后,则会唤醒等待队列里的一个人,去...转载 2019-04-25 19:34:03 · 195 阅读 · 0 评论 -
Java线程的生命周期
原创 2019-04-08 23:23:48 · 85 阅读 · 0 评论 -
并发编程的微观层面和宏观层面
关于Java内存模型的Happen-Before规则的一个示例:线程A,B同时并发执行,A先执行了writer()方法,把v的值改成了true,B线程执行reader()方法时看到了v的值为true,那么此时B线程看到的x的值是多少?class VolatileExample { int x = 0; volatile boolean v = false; ...原创 2019-04-08 08:58:29 · 523 阅读 · 0 评论 -
永远都要把wait()放到循环语句里面!
今天在网上看到一段代码,是模拟银行转账的,如何保证多次转账并发执行的时候,转出账户和转入账户的金额一致。代码可谓巧妙绝伦!先看代码:public class MyLock { public static void main(String[] args) { // 模拟转出和转入账户 Account src = new Account(100000)...原创 2019-04-07 07:51:57 · 1675 阅读 · 0 评论 -
关于LinkedBlockingQueue中notEmpty和notFull-Condition的一点困惑
/** * Inserts the specified element at the tail of this queue, waiting if * necessary for space to become available. */ public void put(E e) throws InterruptedException { i...原创 2019-07-11 09:22:58 · 2638 阅读 · 5 评论