this锁(对象锁)
public class SynchronizedThis {
public static void main ( String[ ] args) {
ThisLock thisLock = new ThisLock ( ) ;
new Thread ( "T1" ) {
@Override
public void run ( ) {
thisLock. m1 ( ) ;
}
} . start ( ) ;
new Thread ( "T2" ) {
@Override
public void run ( ) {
thisLock. m2 ( ) ;
}
} . start ( ) ;
}
}
class ThisLock {
public synchronized void m1 ( ) {
try {
System. out. println ( Thread. currentThread ( ) . getName ( ) ) ;
Thread. sleep ( 10000 ) ;
} catch ( InterruptedException e) {
e. printStackTrace ( ) ;
}
}
public synchronized void m2 ( ) {
try {
System. out. println ( Thread. currentThread ( ) . getName ( ) ) ;
Thread. sleep ( 10000 ) ;
} catch ( InterruptedException e) {
e. printStackTrace ( ) ;
}
}
}
执行后,可以观察到两个同步方法,在多个线程并发访问一个对象不同方法的时候,会被锁住
Class锁
当定义的同步方法是静态方法时,此时加的锁是Class锁
public class SynchronizedStatic {
public static synchronized void m1 ( ) {
try {
System. out. println ( Thread. currentThread ( ) . getName ( ) ) ;
Thread. sleep ( 10000 ) ;
} catch ( InterruptedException e) {
e. printStackTrace ( ) ;
}
}
public static synchronized void m2 ( ) {
try {
System. out. println ( Thread. currentThread ( ) . getName ( ) ) ;
Thread. sleep ( 10000 ) ;
} catch ( InterruptedException e) {
e. printStackTrace ( ) ;
}
}
}