java并发
xb_smart
“It’s the little details that are vital. Little things make big things happen.”
展开
-
并发编程的艺术-双重检查锁定与延迟初始化
在java程序中,有时候可能需要推迟一些高开销的对象初始化操作,并且只有在使用这些对象时才进行初始化。此时程序员可能会采用延迟初始化。但要正确实现线程安全的延迟初始化需要一些技巧,否则很容易出现问题。比如,下面是非线程安全的延迟初始化对象的示例代码: public class UnsafeLazyInitialization { private static Instance instance;转载 2015-11-12 23:15:42 · 680 阅读 · 0 评论 -
concurrent之BlockingQueue
ThreadPoolExecutor类中提交任务到线程池分配线程执行任务使用到一个队列,而这个队列采用的就是BlockingQueue。BlockingQueue实际上定义了一个接口,在java.util.concurrent包中给出了这个接口的一些常用实现,这篇我们整理一下。 0. BlockingQueue简介 BlockingQueue是java.util.concurrent包转载 2016-04-26 13:39:25 · 475 阅读 · 0 评论 -
具有buffer功能的RandomAccessFile
在进行多线程下载过程中,采用RandomAccessFile对文件进行写操作,线程对磁盘的读写非常频繁,导致出现机器顿卡,或一些其他问题。采用具有缓冲的RandomAccessFile后,能快速降低磁盘IO。 开发人员迫切需要提高效率,下面分析RandomAccessFile等文件类的源代码,找出其中的症结所在,并加以改进优化,创建一个"性/价比"俱佳的随机文件访问类Buf转载 2016-04-28 08:49:40 · 3615 阅读 · 1 评论 -
如何通过编程发现Java死锁
死锁是指,两个或多个动作一直在等待其他动作完成而使得所有动作都始终处在阻塞的状态。想要在开发阶段检测到死锁是非常困难的,而想要解除死锁往往需要重新启动程序。更糟的是,死锁通常发生在负载最重的生产过程中,而想要在测试中发现它,十分不易。之所以这么说,是因为测试线程之间所有可能的交叉是不现实的。尽管出现了一些静态分析库可以帮助我们发现可能出现的死锁,我们还是有必要在运行时检测到死锁,并且得到有用的信息转载 2016-11-13 22:31:34 · 670 阅读 · 0 评论