随笔分类 - java并发
java并发
摘要:1.ReentrantLock 给类文件加锁,实现类似synchronized(class)的功能 核心是类文件中,使用static修饰的reentrantLock对象 public class SourceCache { public static final Lock reentrantLock
阅读全文
摘要:批量执行异步任务CompletionService 核心思想,就是将异步结果放入到阻塞队列中,然后再消费队列,实现异步任务批量执行 接口方法说明 Future<V> submit(Callable<V> task); Future<V> submit(Runnable task, V result)
阅读全文
摘要:多线程优化性能,串行操作并行化 串行操作 // 以下2个都是耗时操作 doBizA(); doBizB(); 修改变为并行化 new Thread(() -> doBizA()).start(); new Thread(() -> doBizB()).start(); 异步化,是并行方案的基础,利用
阅读全文
摘要:Condition 一个Lock中应该绑定一个Condition对象。Condition是Java提供用来实现等待/通知的类。 我们知道Object对象提供了wait、waitAll、notify、notifyAll的方法用来实现线程的同步、等待和唤醒。 但Condition类提供了比wait/no
阅读全文
摘要:1.死锁问题 现实世界里,账户转账操作是支持并发的,而且绝对是真正的并行,银行所有的窗口都可以做转账操作。 只要我们能仿照现实世界做转账操作,串行的问题就解决了。 我们试想在古代,没有信息化,账户的存在形式真的就是一个账本,而且每个账户都有一个账本,这些账本都统一存放在文件架上。银行柜员在给我们做转
阅读全文
摘要:1.Synchronized关键字使用 class X { // 修饰非静态方法 synchronized void foo() { // 临界区 } // 修饰静态方法 synchronized static void bar() { // 临界区 } // 修饰代码块 Object obj =
阅读全文
摘要:1.解决并发编程中的可见性问题 volatile 代表不使用cpu缓存,修改后的数据,将直接刷到内存中,被volatile修饰的变量,读取的时候,也是从内存中读取,不从cpu缓存中读取 上代码 // 以下代码来源于【参考1】 class VolatileExample { int x = 0; vo
阅读全文