无状态对象与线程安全

                                                                              无状态对象与线程安全

      过去我们总是在研究线程安全,各种手段保证线程安全,然而在工作一段时间之后,发现了解无状态对象就了解了线程安全的一半

      无状态对象就是在一个类里面没有实例变量,或者所有实例变量都是单例的,那么这个对象在线程数据共享下也不会导致数据脏乱,那么就不会导致数据共享问题,从而保证了线程的安全

     举个例子:无状态对象

      public class A{

            @Autowire 

             //spring默认采用单例模式,所以这里的对象永远只有一份且不可修改,不存在数据共享导致数据脏乱

            private B b;

 

           //数据不可修改不可修改,不存在数据共享导致数据脏乱

           private static final String aa = “无状态”;

         

         //voliate保证了flag的可见性,因为是boolean,不能进行复合操作(如“++”)一旦修改其他线程也会立马更新,保证了数据共享安全 

          private voliate boolean flag = true 

 

           private void method(){

            //每个方法的执行都是在线程里面的一个栈帧的进栈和出栈,局部变量定义在栈上,不存在线程共享问题

           int a;

       }

   有状态对象

  public class C{

             //任何线程都会创建各自对象,存在数据共享导致数据脏乱

            private B b;

 

           private int aa = “有状态”;

         

         //voliate保证了flag的可见性,进行复合操作(如“++”),会导致线程安全问题 

          private voliate int flag = true 

       }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值