1、如果sychronized修饰的不是类的静态方法,锁的是调用的对象:
代码如下:
线程执行类:
public class SynchronizedApp extends Thread {
public synchronized void testAMethod() {
System.out.println("start methodA----------" + currentThread().getName());
}
public synchronized void testBMethod() {
System.out.println("start methodB----------" + currentThread().getName());
}
public void run() {
testAMethod();
testBMethod();
}
}
线程测试类:
public class Test {
public static void main(String[] args) {
int i = 0;
while (true) {
SynchronizedApp test = new SynchronizedApp();
test.setName("SynchronizedApp" + i);
i++;
test.start();
}
}
}
测试结果:
2、如果sychronized修饰的不是类的静态方法,锁的是类,类的每一个对象都要按照顺序调用testAMethod--testBMethod
代码如下:
线程执行类:
public class SynchronizedApp extends Thread {
public synchronized static void testAMethod() {
System.out.println("start methodA----------" + currentThread().getName());
}
public synchronized static void testBMethod() {
System.out.println("start methodB----------" + currentThread().getName());
}
public void run() {
testAMethod();
testBMethod();
}
}
线程测试类:
public class Test {
public static void main(String[] args) {
int i = 0;
while (true) {
SynchronizedApp test = new SynchronizedApp();
test.setName("SynchronizedApp" + i);
i++;
test.start();
}
}
}
测试结果:对象的执行顺序进行