synchronized 锁的是方法还是对象还是类?测试实例
package com.swt.lock;
public class Test02 {
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
SyncMethod syncMethod = new SyncMethod();
syncMethod.sysn1();
}
});
thread.start();
thread = new Thread(new Runnable() {
@Override
public void run() {
SyncMethod syncMethod = new SyncMethod();
syncMethod.sysn2();
}
});
thread.start();
thread.join();
}
}
class SyncMethod {
public synchronized void sysn1() {
for (int i = 0; i < 100; i++) {
System.out.println("sysn1 " + i);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public synchronized void sysn2() {
for (int i = 0; i < 100; i++) {
System.out.println("sysn2 " + i);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
输出结果可以看到,两个线程是交替执行。
sysn1 0 sysn2 0 sysn2 1 sysn1 1 sysn2 2 sysn1 2 sysn2 3 sysn1 3 sysn2 4
package com.swt.lock;
public class Test02 {
public static void main(String[] args) throws InterruptedException {
SyncMethod syncMethod = new SyncMethod();
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
syncMethod.sysn1();
}
});
thread.start();
thread = new Thread(new Runnable() {
@Override
public void run() {
syncMethod.sysn2();
}
});
thread.start();
thread.join();
}
}
class SyncMethod {
public synchronized void sysn1() {
for (int i = 0; i < 100; i++) {
System.out.println("sysn1 " + i);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public synchronized void sysn2() {
for (int i = 0; i < 100; i++) {
System.out.println("sysn2 " + i);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
输出结果可以看到,两个线程是顺序执行
sysn1 0 sysn1 1 sysn1 2 ... sysn1 98 sysn1 99 sysn2 0 sysn2 1 sysn2 2 sysn2 3
浙公网安备 33010602011771号