随笔分类 -  多线程

摘要:使用Future获得异步执行结果时,要么调用阻塞方法get(),要么轮询看isDone()是否为true,这两种方法都不是很好,因为主线程也会被迫等待。从Java 8开始引入了CompletableFuture,它针对Future做了改进,可以传入回调对象,当异步任务完成或者发生异常时,自动调用回调 阅读全文
posted @ 2021-03-25 16:12 表演给自己看的认真 阅读(110) 评论(0) 推荐(0) 编辑
摘要:/** * java.util.concurrent.locks包提供的ReentrantLock用于替代synchronized加锁* 因为synchronized是Java语言层面提供的语法,所以我们不需要考虑异常,* 而ReentrantLock是Java代码实现的锁,我们就必须先获取锁,然后 阅读全文
posted @ 2019-12-20 15:47 表演给自己看的认真 阅读(190) 评论(0) 推荐(0) 编辑
摘要:/** * ReentrantLock使用Condition对象来实现wait和notify的功能* 使用Condition时,引用的Condition对象必须从Lock实例的newCondition()返回,这样才能获得一个绑定了Lock实例的Condition实例* Condition提供的aw 阅读全文
posted @ 2019-12-20 14:53 表演给自己看的认真 阅读(162) 评论(0) 推荐(0) 编辑
摘要:/** * StampedLock和ReadWriteLock相比,改进之处在于:读的过程中也允许获取写锁后写入!这样一来,我们读的数据就可能不一致,所以,需要一点额外的代码来判断读的过程中是否有写入,这种读锁是一种乐观锁。* 乐观锁的意思就是乐观地估计读的过程中大概率不会有写入,因此被称为乐观锁。 阅读全文
posted @ 2019-12-20 14:52 表演给自己看的认真 阅读(156) 评论(0) 推荐(0) 编辑
摘要:/*** JDK提供了ExecutorService实现了线程池功能:* 线程池内部维护一组线程,可以高效执行大量小任务;* Executors提供了静态方法创建不同类型的ExecutorService;* 必须调用shutdown()关闭ExecutorService;* ScheduledThr 阅读全文
posted @ 2019-12-20 14:51 表演给自己看的认真 阅读(169) 评论(0) 推荐(0) 编辑
摘要:/** * Runnable接口有个问题,它的方法没有返回值。如果任务需要一个返回结果,那么只能保存到变量,还要提供额外的方法读取,非常不便。 * Java标准库还提供了一个Callable接口,和Runnable接口比,它多了一个返回值 * Callable接口是一个泛型接口,可以返回指定类型的结 阅读全文
posted @ 2019-12-20 14:49 表演给自己看的认真 阅读(818) 评论(0) 推荐(0) 编辑
摘要:一、volatile关键字 volatile关键字的目的是告诉虚拟机:1.每次访问变量时,总是获取主内存的最新值;2.每次修改变量后,立刻回写到主内存。 volatile关键字解决的是可见性问题:当一个线程修改了某个共享变量的值,其他线程能够立刻看到修改后的值。volatile关键字解决了共享变量在 阅读全文
posted @ 2019-12-16 17:26 表演给自己看的认真 阅读(160) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示