Javaキーワードsynchronizedの詳細


 synchronized    ,        ,          A          ,                   B(  C D ),                B(  C D)              A,    ,            :synchronized     synchronized  。
1. synchronized   :

             synchronized       synchronized   。 :
  public synchronized void accessVal(int newVal);
  synchronized              :          ,   synchronized                       ,        ,      ,     ,              ,              ,         。                   ,       synchronized                    (                    ),                 (                      synchronized)。
    Java  ,      ,          ,                   synchronized ,                。
  synchronized      :           synchronized         ,   ,         run()     synchronized ,                  ,            synchronized             。                           ,      synchronized ,               ,   Java              ,    synchronized  。
 
2. synchronized  :

     synchronized      synchronized  。    :
  synchronized(syncObject) {
  //         
  }
  synchronized          ,            syncObject (    ,        )      ,        。           ,           ,      。
 
 
 
 synchronized(this)     

   、              object    synchronized(this)      ,                。                               。
   、       object   synchronized(this)      ,     object     synchronized(this)            。
   、  ,       object   synchronized(this)      ,            object   synchronized(this)          。
   、                。    ,       object   synchronized(this)      ,       object    。  ,      object                   。
   、              
 
 
synchronized       
public class TextThread
{
/**
* @param args
*/
public static void main(String[] args)
{
// TODO         
        TxtThread tt = new TxtThread();
        new Thread(tt).start();
        new Thread(tt).start();
        new Thread(tt).start();
        new Thread(tt).start();
}
}
class TxtThread implements Runnable
{
int num = 100;
String str = new String();
public void run()
{
while (true)
{
   synchronized(str)
   {
   if (num>0)
   {
    try
    {
     Thread.sleep(10);
    }
    catch(Exception e)
    {
     e.getMessage();
    }
    System.out.println(Thread.currentThread().getName()+ "this is "+ num--);
   }
   }
}
}
}
               ,        ,   Thread.sleep(10)
Java                   ,        synchronized                      。    ?――   synchronized                。
    ,synchronized             ,          ,                 。       ,synchronized    instance  、object reference(    )、static   class literals(       )  。
        ,        :
A.  synchronized             ,         ,              ――                     。
B.         (lock)     。
C.                  ,        ,             。
     synchronized              :
 
  P1、P2          ,                      ,P1、P2        。
 
1.  synchronized        ,      :
Public synchronized void methodAAA()
{
//….
}
        ,   synchronized         ?               。    ,     P1                ,         ,       。         Class        P2            synchronized      。
              :
public void methodAAA()
{
synchronized (this)      // (1)
{
       //…..
}
}
(1)  this      ?              , P1。          synchronized   object reference。――     P1      ,     P1     ,  P2  ,P1         ,                    ,      :(
2.   ,      :
public void method3(SomeObject so)
{
    synchronized(so)
    {
       //…..
    }
}
  ,   so    ,                     。             ,        ,            ,           ,         instance  (       )    :
class Foo implements Runnable
{
        private byte[] lock = new byte[0]; //    instance  
        Public void methodA()
        {
           synchronized(lock) { //… }
        }
        //…..
}
 :    byte                 ――         :      byte[]    3    , Object lock = new Object()   7    。
3. synchronized   static   ,      :
Class Foo
{
    public synchronized static void methodAAA()   //    static   
    {
        //….
    }
    public void methodBBB()
    {
       synchronized(Foo.class)   // class literal(       )
    }
}
       methodBBB()    class literal      ,     static           ,       ,                (Class,       Class          )。
   《Effective Java》        Foo.class  P1.getClass()          ,   P1.getClass()      Class   。P1    Foo      。
    :           synchronized static  A,      synchronized  instance  B,          Obj         A B     ,      ,          。A     Obj    , B   Obj     Class。
 
    :
   synchronized        ,                 。
 
                         :
1.   private  instance  +   get  ,     public/protected instance  。        public,                      ,    。   JavaBean         。
2.   instance       ,    ArrayList   ,          ,         get      instance      ,          ,    private      ,      。         get     synchronized  ,  ,     private   clone()――  ,                
 
 
  ,       :Collections.synchronizedMap(new HashMap()),    MAP            ,          HashMap,web application  web     ,                 。