大佬看看這個代碼怎么樣
以下是一個簡單的Java多線程生產者-消費者模型代碼實現:
```java
import java.util.LinkedList;
public class ProducerConsumerExample {
? ? public static void main(String[] args) throws InterruptedException {
? ? ? ? final PC pc = new PC();
? ? ? ? Thread t1 = new Thread(new Runnable() {
? ? ? ? ? ? @Override
? ? ? ? ? ? public void run() {
? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? pc.produce();
? ? ? ? ? ? ? ? } catch (InterruptedException e) {
? ? ? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? });
? ? ? ? Thread t2 = new Thread(new Runnable() {
? ? ? ? ? ? @Override
? ? ? ? ? ? public void run() {
? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? pc.consume();
? ? ? ? ? ? ? ? } catch (InterruptedException e) {
? ? ? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? });
? ? ? ? t1.start();
? ? ? ? t2.start();
? ? ? ? t1.join();
? ? ? ? t2.join();
? ? }
? ? public static class PC {
? ? ? ? LinkedList<Integer> list = new LinkedList<>();
? ? ? ? int capacity = 2;
? ? ? ? public void produce() throws InterruptedException {
? ? ? ? ? ? int value = 0;
? ? ? ? ? ? while (true) {
? ? ? ? ? ? ? ? synchronized (this) {?
? ? ? ? ? ? ? ? ? ? while (list.size() == capacity)
? ? ? ? ? ? ? ? ? ? ? ? wait();
? ? ? ? ? ? ? ? ? ? System.out.println("Producer produced-" + value);
? ? ? ? ? ? ? ? ? ? list.add(value++);
? ? ? ? ? ? ? ? ? ? notify();
? ? ? ? ? ? ? ? ? ? Thread.sleep(1000);? ?
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? public void consume() throws InterruptedException {
? ? ? ? ? ? while (true) {
? ? ? ? ? ? ? ? synchronized (this) {?
? ? ? ? ? ? ? ? ? ? while (list.size() == 0)
? ? ? ? ? ? ? ? ? ? ? ? wait();
? ? ? ? ? ? ? ? ? ? int val = list.removeFirst();
? ? ? ? ? ? ? ? ? ? System.out.println("Consumer consumed-" + val);
? ? ? ? ? ? ? ? ? ? notify();
? ? ? ? ? ? ? ? ? ? Thread.sleep(1000);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? }
}
```
這段代碼實現了一個生產者-消費者模型拾稳,多個線程同時訪問一個共享的數據結構刃跛,并通過wait和notify方法進行同步和協(xié)調锄蹂,實現線程之間的合作和協(xié)作。生產者生產數據并加入到列表中,消費者從列表中取出數據并消費实束。
請大佬指教