76 lines
1.9 KiB
Java
76 lines
1.9 KiB
Java
package jTest;
|
|
|
|
public class ThreadTestWait {
|
|
public static void main(String[] args) {
|
|
// 使用
|
|
SharedResource resource = new SharedResource();
|
|
new Producer(resource).start();
|
|
new Consumer(resource).start();
|
|
}
|
|
}
|
|
|
|
class SharedResource {
|
|
private final Object lock = new Object();
|
|
private boolean ready = false;
|
|
|
|
public void produce() throws InterruptedException {
|
|
synchronized (lock) {
|
|
while (ready) {
|
|
lock.wait(); // 等待直到消费者消费
|
|
}
|
|
// 生产资源
|
|
ready = true;
|
|
lock.notifyAll(); // 通知所有等待的线程
|
|
}
|
|
}
|
|
|
|
public void consume() throws InterruptedException {
|
|
synchronized (lock) {
|
|
while (!ready) {
|
|
lock.wait(); // 等待直到生产者生产
|
|
}
|
|
// 消费资源
|
|
ready = false;
|
|
lock.notifyAll(); // 通知所有等待的线程
|
|
}
|
|
}
|
|
}
|
|
|
|
class Producer extends Thread {
|
|
private final SharedResource resource;
|
|
|
|
public Producer(SharedResource resource) {
|
|
this.resource = resource;
|
|
}
|
|
|
|
public void run() {
|
|
try {
|
|
while (true) {
|
|
resource.produce();
|
|
Thread.sleep(1000); // 模拟生产时间
|
|
}
|
|
} catch (InterruptedException e) {
|
|
Thread.currentThread().interrupt();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
class Consumer extends Thread {
|
|
private final SharedResource resource;
|
|
|
|
public Consumer(SharedResource resource) {
|
|
this.resource = resource;
|
|
}
|
|
|
|
public void run() {
|
|
try {
|
|
while (true) {
|
|
resource.consume();
|
|
Thread.sleep(1000); // 模拟消费时间
|
|
}
|
|
} catch (InterruptedException e) {
|
|
Thread.currentThread().interrupt();
|
|
}
|
|
}
|
|
} |