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.如何安全发布一个对象