84 lines
2.2 KiB
Java
84 lines
2.2 KiB
Java
package thread_safe.safe4;
|
||
|
||
public class SynchronizedMethodLocakObject2 {
|
||
|
||
public static void main(String[] args) {
|
||
MyObject myObject = new MyObject();
|
||
|
||
ThreadA threadA = new ThreadA(myObject);
|
||
threadA.setName("ThreadA");
|
||
|
||
ThreadB threadB = new ThreadB(myObject);
|
||
threadB.setName("ThreadB");
|
||
|
||
threadA.start();
|
||
threadB.start();
|
||
}
|
||
|
||
// 测试对象
|
||
public static class MyObject {
|
||
|
||
/**
|
||
* 测试方法A
|
||
*/
|
||
synchronized public void methodA() {
|
||
try {
|
||
System.out.println(Thread.currentThread().getName() + " 开始 " + System.currentTimeMillis());
|
||
Thread.sleep(1000);
|
||
System.out.println(Thread.currentThread().getName() + " 结束 " + System.currentTimeMillis());
|
||
} catch (Exception exception) {
|
||
exception.printStackTrace();
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 测试方法B
|
||
* 如果不加synchronized,整个程序是异步执行的
|
||
* 如果加synchronized,整个程序是同步执行的
|
||
*/
|
||
synchronized public void methodB() {
|
||
try {
|
||
System.out.println(Thread.currentThread().getName() + " 开始 " + System.currentTimeMillis());
|
||
Thread.sleep(1000);
|
||
System.out.println(Thread.currentThread().getName() + " 结束 " + System.currentTimeMillis());
|
||
} catch (Exception exception) {
|
||
exception.printStackTrace();
|
||
}
|
||
}
|
||
}
|
||
|
||
// 线程A
|
||
public static class ThreadA extends Thread {
|
||
|
||
private final MyObject myObject;
|
||
|
||
public ThreadA(MyObject myObject) {
|
||
super();
|
||
this.myObject = myObject;
|
||
}
|
||
|
||
@Override
|
||
public void run() {
|
||
super.run();
|
||
myObject.methodA();
|
||
}
|
||
}
|
||
|
||
// 线程B
|
||
public static class ThreadB extends Thread {
|
||
|
||
private final MyObject myObject;
|
||
|
||
public ThreadB(MyObject myObject) {
|
||
super();
|
||
this.myObject = myObject;
|
||
}
|
||
|
||
@Override
|
||
public void run() {
|
||
super.run();
|
||
myObject.methodB();
|
||
}
|
||
}
|
||
}
|