Java并发
木棉上的光
公众号:不止于Java
Github:https://github.com/cyxpdc?tab=repositories
邮箱:1142439493@qq.com
展开
-
Java并发(一)并发基础
https://www.cnblogs.com/jinshuai86/p/9226164.htmlJava编程的逻辑Java并发编程的艺术极客时间:Java并发编程实战Java并发基础知识并发bug源头缓存导致的可见性问题线程切换带来的原子性问题编译优化带来的有序性问题共享内存出现的问题线程表示一条单独的执行流,每个线程有自己的执行计数器,有自己的栈,但可以共享内存,共享内存是...原创 2019-08-23 13:58:51 · 344 阅读 · 0 评论 -
Java并发(十一)并发案例
极客时间:Java并发编程实战1 高性能限流器GuavaRateLimiter令牌桶算法:记录一个下一令牌产生的时间,并动态更新它,就能够轻松完成限流功能与信号量区别:信号量是“一次性可以有多少个线程一起执行”,限流器是“每秒最多允许几个请求通过”“1个请求/xxx秒”申请令牌时调用acquire方法1.如果请求时间now在下⼀令牌产⽣时间next之后:resync:通过(now-ne...原创 2019-08-23 14:44:45 · 348 阅读 · 0 评论 -
Java并发(十)并发设计模式
极客时间:Java并发编程实战1 Immutability模式将一个类所有的属性都设置成final的,并且只允许存在只读方法,那么这个类基本上就具备不可变性了。更严格的做法是这个类本身也是final的,也就是不允许继承。因为子类可以覆盖父类的方法,有可能改变不可变性所以推荐在实际工作中,使用这种更严格的做法。可以利用享元模式避免创建重复对象,Long、Integer、Short、Byte...原创 2019-08-23 14:43:05 · 493 阅读 · 0 评论 -
Java并发(九)生产者·消费者实现
1.synchronized实现队列static class MyBlockingQueue<E> { private Queue<E> queue = null; private int limit; public MyBlockingQueue(int limit) { this.limit = limit; ...原创 2019-08-23 14:38:17 · 148 阅读 · 0 评论 -
Java并发(八)线程知识点
优先级高的线程分配时间片的数量要多于优先级低的线程设置线程优先级时,针对频繁阻塞(休眠或者I/O操作)的线程需要设置较高优先级;而偏重计算(需要较多CPU时间或者偏运算)的线程则设置较低的优先级;确保处理器不会被独占线程优先级不能作为程序正确性的依赖,因为操作系统可以完全不用理会Java线程对于优先级的设定Java线程六种状态:状态变迁:线程调用阻塞式 API 时,在操作系统层...原创 2019-08-23 14:37:09 · 221 阅读 · 0 评论 -
Java并发(七)异步执行任务之手写线程池、定时任务、CompletableFuture
手写表示子任务:public interface Callable<V> { V call() throws Exception;}表示异步调用的结果:public interface MyFuture <V> { V get() throws Exception ;//返回真正的结果,如果结果还没有计算完成,get会阻塞直到计算完成,如果调用过...原创 2019-08-23 14:34:41 · 1259 阅读 · 0 评论 -
Java并发(六)显示锁和StampedLock
显式锁可以解决synchronized的限制主要接口和类:锁接口Lock,主要实现类是ReentrantLock读写锁接口ReadWriteLock,主要实现类是ReentrantReadWriteLock相比synchronized,显式锁支持以非阻塞方式获取锁、可以响应中断、可以限时,这使得它灵活的多1 Lockpublic interface Lock { //获取...原创 2019-08-23 14:29:22 · 261 阅读 · 1 评论 -
Java并发(五)synchronized
synchronized1 知识点synchronized可以用于修饰类的实例方法、静态方法和代码块synchronized实例方法实际保护的是同一个对象的方法调用,即当前实例对象,即this,this对象有一个锁和一个等待队列(任意对象都有一个锁和等待队列,还有另一个等待队列,表示条件队列,该队列用于线程间的协作),锁只能被一个线程持有,其他试图获得同样锁的线程需要等待只要访问的是同一...原创 2019-08-23 14:26:21 · 260 阅读 · 0 评论 -
Java并发(四)并发容器
并发容器写时拷贝技术的容器类写时拷贝是解决并发问题的一种重要思路有两个简单的类CopyOnWriteArrayList和CopyOnWriteArraySet场景:不可变对象的写操作:如String的replace方法,其并没有更改原字符串里面value[]数组的内容,而是创建了一个新字符串;函数式编程:函数式编程的基础是不可变性(Immutability),所以函数式编程里面所有的修...原创 2019-08-23 14:20:24 · 247 阅读 · 0 评论 -
Java并发(三)并发工具
并发工具1:同步协作工具读写锁ReentrantReadWriteLock信号量Semaphore倒计时门栓CountDownLatch循环栅栏CyclicBarrier交换者Exchanger基于AQS实现在一些特定的同步协作场景中,相比使用最基本的wait/notify、显示锁/条件,它们更为方便,效率更高1 读写锁ReentrantReadWriteLock1.1 场景...原创 2019-08-23 14:15:58 · 259 阅读 · 0 评论 -
Java并发(二)Java内存模型
3 Java内存模型本质上可以理解为,Java 内存模型规范了 JVM 如何提供按需禁用缓存和编译优化的方法。具体来说,这些方法包括 volatile、synchronized 和 final 三个关键字,以及六项 Happens-Before 规则Happens-Before为语义增强3.1 基础3.1.1 并发编程模型的两个模型和两个关键问题线程之间如何通信及线程之间如何同步:1...原创 2019-08-23 14:09:16 · 202 阅读 · 0 评论 -
Java并发(十二)并发模型
极客时间:Java并发编程实战1 Actor模型:面向对象原生的并发模型概念Actor模型本质上是一种计算模型,基本的计算单元称为Actor,Actor之间通过消息进行通信;在Actor模型中,所有的计算都是在Actor中执行的。在面向对象编程里面,一切都是对象;在Actor模型里,一切都是Actor,并且Actor之间是完全隔离的,不会共享任何变量。在Java领域,除了可以使用...原创 2019-08-23 14:45:41 · 455 阅读 · 0 评论