套路1 - 立即加载 instantly initialization
|
|
套路2 - 延迟初始化 lazy initialization
|
|
套路3 - 静态内部类 static Holder
|
|
套路4 - 枚举 enum
|
|
套路5 - 双重锁 double check
|
|
|
|
Then 还有一只特别胖
|
|
|
|
|
|
|
|
|
|
|
|
Java 线程(Runnable)的异常处理, 以下的阐述均基于Runnable的线程实现
首先,有个问题,如果Java子线程发生异常会怎么样?实际上会导致该线程直接终止。当年自己写了个线程模型大概是这样的:
Fork And Join 的并发框架对与大型任务的分解计算是十分方便的。主要是将任务分割(fork)最后再合并(join)得到结果。
实际上使用了分治
的思想。其中涉及到任务窃取算法等。
以下是一个计算Fibonacci数列的Demo,使用BigInteger是为了避免溢出,但是计算效率大大降低,可以用Long类型代替。
wait 和 notify/notifyAll 主要是用于线程间通信的方法,即信号量的通信方法。他们是Java
Object
的实例方法,所以可以用于各种引用类型。由于wait和notify/notifyAll必须在获取到monitor(锁)的区域内使用,所以,我们更多的是使用synchronized锁住线程共享的变量,并且在共享变量上做线程间通信。