diff --git a/src/main/java/thead/thread_7/Run.java b/src/main/java/thead/thread_7/Run.java new file mode 100644 index 0000000..7f50a38 --- /dev/null +++ b/src/main/java/thead/thread_7/Run.java @@ -0,0 +1,12 @@ +package thead.thread_7; + +public class Run { + public static void main(String[] args) { + Service service = new Service(); + ThreadA threadA = new ThreadA(service); + threadA.start(); + + ThreadB threadB = new ThreadB(service); + threadB.start(); + } +} diff --git a/src/main/java/thead/thread_7/Service.java b/src/main/java/thead/thread_7/Service.java new file mode 100644 index 0000000..b499d35 --- /dev/null +++ b/src/main/java/thead/thread_7/Service.java @@ -0,0 +1,21 @@ +package thead.thread_7; + +public class Service { + public synchronized static void methodB() { + synchronized (Service.class) { + System.out.println("B方法开始"); + System.out.println("B方法结束"); + } + } + + public void methodA() { + synchronized (this) { + System.out.println("A方法开始"); + boolean b = true; + while (b) { + + } + System.out.println("A方法结束"); + } + } +} diff --git a/src/main/java/thead/thread_7/ThreadA.java b/src/main/java/thead/thread_7/ThreadA.java new file mode 100644 index 0000000..d1e8b73 --- /dev/null +++ b/src/main/java/thead/thread_7/ThreadA.java @@ -0,0 +1,23 @@ +package thead.thread_7; + +public class ThreadA extends Thread { + + public Service service; + + /** + * Allocates a new {@code Thread} object. This constructor has the same + * effect as {@linkplain #Thread(ThreadGroup, Runnable, String) Thread} + * {@code (null, null, gname)}, where {@code gname} is a newly generated + * name. Automatically generated names are of the form + * {@code "Thread-"+}n, where n is an integer. + */ + public ThreadA(Service service) { + super.run(); + this.service = service; + } + + @Override + public void run() { + service.methodA(); + } +} diff --git a/src/main/java/thead/thread_7/ThreadB.java b/src/main/java/thead/thread_7/ThreadB.java new file mode 100644 index 0000000..2286a71 --- /dev/null +++ b/src/main/java/thead/thread_7/ThreadB.java @@ -0,0 +1,22 @@ +package thead.thread_7; + +public class ThreadB extends Thread { + + private final Service service; + + /** + * Allocates a new {@code Thread} object. This constructor has the same + * effect as {@linkplain #Thread(ThreadGroup, Runnable, String) Thread} + * {@code (null, null, gname)}, where {@code gname} is a newly generated + * name. Automatically generated names are of the form + * {@code "Thread-"+}n, where n is an integer. + */ + public ThreadB(Service service) { + this.service = service; + } + + @Override + public void run() { + service.methodB(); + } +}