MultiThread/multithreading/src/main/java/thread_safe/safe4/SynchronizedMethodLocakObje...

84 lines
2.2 KiB
Java
Raw Normal View History

2025-01-21 21:39:23 +08:00
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();
}
}
}