2共享对象

来源:互联网 发布:jenkins linux slave 编辑:程序博客网 时间:2024/06/05 21:18

1.共享对象

      1.锁不仅仅是关于同步和互斥的,也是关于内存可见的。为了保证所有线程都能看到共享的,可变的变量的最新值,读取和写入线程必须使用公共的锁进行同步

      2.volatile保证内存可见性,但是不保证原子性,满足以下条件时可以使用volatile关键字

         2.1写入变量时不依赖变量的当前值,或者保证只有一个线程会对变量进行修改

         2.2变量不需要和其他变量 共同参与不变约束

         2.3访问变量时不需要加锁

      3. 逸出

           1.class a{

               private static List<String> list = new Arraylist<String>();

               publilc List<String> getvalue(){

                   //此处list逸出,获得list引用的线程可以进行其他任何操作

                   return list;

}

            }

           2.this引用的逸出

              2.1 在构造函数中启动线程导致逸出

              2.2 构造函数中使用匿名类时可能导致逸出

      http://blog.csdn.net/flysqrlboy/article/details/10607295#

          3.线程封闭(达到避免使用共享变量)

             3.1栈封闭,使用局部变量

             3.2threadLocal线程封闭

          4.如何保证一个对象不可用

             1.他的状态在创建后不允许呗修改

              2.所有域都是final的

              3.对象创建没有发生this逸出

          5.如何安全发布一个对象

             

     

0 0
原创粉丝点击