gpt4 book ai didi

java - 线程 : How to put a check inside Thread Consumer for Data reciving check

转载 作者:行者123 更新时间:2023-12-01 14:32:56 25 4
gpt4 key购买 nike

我有如下所示的生产者消费者示例程序

如何在我的 Consumer Thread 类中放置一个 Condition,以便如果我在 1 分钟内没有收到来自生产者的数据,我需要记录该数据??

这是我的生产者消费者计划

public class ProducerConsumerTest {
public static void main(String[] args) {
CubbyHole c = new CubbyHole();
Producer p1 = new Producer(c, 1);
Consumer c1 = new Consumer(c, 1);
p1.start();
c1.start();
}
}

class CubbyHole {
private int contents;
private boolean available = false;

public synchronized int get() {
while (available == false) {
try {
wait();
} catch (InterruptedException e) {
}
}
available = false;
notifyAll();
return contents;
}

public synchronized void put(int value) {
while (available == true) {
try {
wait();
} catch (InterruptedException e) {
}
}
contents = value;
available = true;
notifyAll();
}
}



class Producer extends Thread {
private CubbyHole cubbyhole;
private int number;

public Producer(CubbyHole c, int number) {
cubbyhole = c;
this.number = number;
}

public void run() {
while(true)
{
for (int i = 0; i < 100000; i++) {
cubbyhole.put(i);
System.out.println("Producer #" + this.number + " put: " + i);
try {
sleep((int) (Math.random() * 2000));
} catch (Exception e) {
}
}
}
}
}


class Consumer extends Thread {
private CubbyHole cubbyhole;
private int number;

public Consumer(CubbyHole c, int number) {
cubbyhole = c;
this.number = number;
}

public void run() {
while(true)
{
int value = 0;
for (int i = 0; i < 100000; i++) {
value = cubbyhole.get();
System.out.println("Consumer #" + this.number + " got: " + value);
}
}
}
}

有人可以帮忙吗

最佳答案

您可以使用Object#wait(long timeout)并从 get() 方法内部记录:

try {
wait(60 * 1000);
if (available == false) {
//log
}
} catch (InterruptedException e) {
}

关于java - 线程 : How to put a check inside Thread Consumer for Data reciving check,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16714693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com