近日,我把《JAVA多线程设计模式》一书又重新温习了一遍,温故而知新嘛。期间,有一些重点和难点的地方,我摘录下来,和大家一起分享一下。
² Synchronized和lock & unlock的区别
Void method() {
Lock();
…
Unlock();
}
这段代码会有问题的。如果在调用lock与unlock方法之间,存在有return语句或者发生异常的话,那么锁定将不可能解除。相反,synchronized块无论怎样,最后都会解除锁定。
² 对long和double的操作不是原子操作,即线程不安全,可以加锁或者加volatile关键字。
l 基本型和引用类型的指定、引用是原子的操作。
l Long与double的指定、引用是可以分割的。
l 在线程间共享long或double的字段时,必须在synchronized块或是声明为volatile。
² 设计使用到线程的程序时,会因为重点放在“主体”与“客体”的不同,出现两种开发方式:Actor-based(注重主体)和Task-based(注重客体)。
l Actor-based,就是“偏重于线程”的开发方式,代表线程的实例会拥有进行工作所需的信息。这样一来,可降低线程之间需要传递的信息。每个线程会使用其他线程所传递的信息进行处理,改变自己的内部状态。这种线程通常被称为actor。
l Task-based,就是“偏重于工作”的开发方式,就是将信息放在线程之间所传递的实例里。这个开发方式,可使巨大的任务能在轻巧的线程之间往来。