Kotlin-Demo/jTest/ThreadTestWait.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();
}
}
}