synchronized 之我见

来源:互联网 发布:python自动点广告赚钱 编辑:程序博客网 时间:2024/06/05 00:16
                       深刻理解synchronized


  (1)sychronized的字面意思是同步。他在java中的作用是保证多线程中数据的同步。
  (2)你应该把synchronized理解为同步锁子。他的精髓是你锁定的对象是什么。
       根据锁定的对象的不同大概有这样几种用法:
       <1>  锁定类:
            第一种情况:
            public class Test{
                 
               public void method(){


                  synchronized(Test.class){
                    
                    // 需要同步的代码
                    }


                  }


            }
           第二种情况:
          public class Test{


             public  synchronized static void method(){


                // 需要同步的代码
               }




             }
         这两种情况的效果是一样的同步的都是本类,也就是说同一时间,不同线程中,
  只有一个地方获得了本类的锁,在执行其中的一个类同步代码部分。
   <2> 锁定类的实例。
       第一种情况:
       public class Test{


       public synchronized void method(){
          // 需要同步的代码
         }
       }
      第二种情况:
      public  class Test{
     
       public void method(){


       synchronized(this){
       // 需要同步的代码
       }
       }
      }
      这两种情况的效果是一样的同步的都是本类,也就是说同一时间,不同线程中,
  只有一个地方获得了本类的实例的锁,在执行其中的某个类的同一个实例的同步代码部分。
     第三种情况:
     public class Test{

byte[] lock = new byte[0];


        public void method(){
         
          synchronized(lock){
            // 同步的代码
           }


        }


    } 
   本质上这三种情况是一样的都是获得的对象的实例的锁。
  参考:(1)http://blog.csdn.net/yaerfeng/article/details/7254734
        (2)http://my.oschina.net/20076678/blog/173166     

0 0
原创粉丝点击