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 , 。