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

84 lines
2.2 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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();
}
}
}