public class WaitNotifyTest1 {
public static void main(String[] args) {
Object lock=new Object();
A a = new A(lock);
a.start();
B b = new B(lock);
b.start();
}
}
class A extends Thread{
Object lock;
public A(Object lock) {
super();
this.lock = lock;
}
public void run() {
synchronized (lock) {
System.out.println("A");
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("A wait end");
}
}
}
class B extends Thread{
Object lock;
public B(Object lock) {
super();
this.lock = lock;
}
public void run() {
synchronized (lock) {
System.out.println("B");
lock.notify();
System.out.println("B notify end");
}
}
}
public class WaitNotifyTest2 {
public static int num=0;
public static final int count=50;
public static void main(String[] args) {
Object lock=new Object();
Child child = new Child(lock);
child.start();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
Main main = new Main(lock);
main.start();
}
}
class Main extends Thread{
Object lock;
public Main(Object lock) {
super();
this.lock = lock;
}
public void run() {
synchronized (lock) {
for (int i = 1;WaitNotifyTest2.num<WaitNotifyTest2.count; i++) {
System.out.println("Main"+i);
if (i>0&&i%100==0) {
WaitNotifyTest2.num++;
lock.notify();
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
System.out.println("main end");
}
}
}
class Child extends Thread{
Object lock;
public Child(Object lock) {
this.lock = lock;
}
public void run() {
synchronized (lock) {
for (int i = 1;WaitNotifyTest2.num<WaitNotifyTest2.count; i++) {
System.out.println("Child"+i);
if (i>0&&i%10==0) {
lock.notify();
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
System.out.println("child end");
lock.notify();
}
}
}
WaitNotify测试
最新推荐文章于 2024-09-04 15:29:36 发布