1_基础知识_chapter04_对象的组合_2_实例封闭

  • 封闭

    (1) 封装简化了线程安全类的实现过程。将数据封装在对象内部, 可以将数据的访问限制在对象的方法上, 从而更容易确保线程在访问数据时总能持有正确的锁

    (2) 被封闭对象不能超出它们既定的作用域

    可以封闭在一个类实例中(private变量)

    可以封闭在某个作用域内(局部变量)

    封闭在线程内(只在同一个线程的不同方法内传递, 不在不同线程间传递)

  • 可以使用对象的内置锁this对内部的对象进行封闭, 但是用其他的锁也可以, 只要确保使用了同一个锁。

    对于不同的状态变量, 还可以使用不同的锁来增加灵活性

  • Java监视器模式

    (1) 将对象的所有可变状态都封装起来, 并由对象的内置锁保护

    (2) 示例

      public class PrivateLock {
    
          private final Object myLock = new Object();
    
          @GuardedBy("myLock")
          Widget widget;
    
          void someMethod() {
              synchronized (myLock) {
              // Access or modify the state of widget
              }
          }
    
          class Widget {
          }
      }
    

    myLock就是内置锁

    (3) 优点

    私有的锁可以将锁封装起来,使客户代码无法得到锁

  • 装饰器模式实现线程封闭

    一些基本的容器类例如ArrayList不是线程安全的, 但是可以使用装饰器模式将容器类封装在一个同步的包装器对象中,而包装器将接口中的所有方法都实现为synchronized方法, 并将调用请求转发到底层的容器对象上(例如Collections.synchronizedList)

你可能感兴趣的:(1_基础知识_chapter04_对象的组合_2_实例封闭)