Tag: wait

生产者 – Java中的消费者multithreading

我想在Java中使用multithreading等待和通知方法编写程序。 该程序有一个堆栈(max-length = 5)。 生产者永远生成数字并将其放入堆栈中,消费者从堆栈中选择它。 当堆栈已满时,生产者必须等待,当堆栈为空时,消费者必须等待。 问题是它只运行一次,我的意思是一旦它产生5个数字就会停止,但是我将run方法放入while(true)块以运行不间断但它没有。 这是我到目前为止所尝试的。 制片人类: package trail; import java.util.Random; import java.util.Stack; public class Thread1 implements Runnable { int result; Random rand = new Random(); Stack A = new Stack(); public Thread1(Stack A) { this.A = A; } public synchronized void produce() { while (A.size() >= 5) { System.out.println(“List is Full”); try […]

停止代码,直到满足条件

如何创建一个函数或组件等,在满足条件之前停止所有正在运行的代码? 例如,与JOptionPane相同的方式,如果我有这样的例子: JOptionPane.showInputDialog(null, “Hello”, “Title”, 1); 在函数等中然后打印到控制台之后它将不会打印,直到我关闭JOptionPane。 我猜这个组件有内置的某种线程设置,但我怎么能用我自己的函数复制它? 所以说例如我想让JFrames延迟一切,直到它被关闭,所以它就像一个JOptionPane。 或者例如有一个具有多个输入的函数,这些函数已经更新,并且在内部对它进行了一些数学计算,如果它是某个值返回了一个布尔值,但是除了那些之外的其他所有内容都被暂停,直到返回真正的布尔值。 我猜测解决方案是某种线程设置,但我对Java很新,当我在过去编码时,我还没有真正使用过线程,所以我无法创建一个好的停止 – 启动/暂停 – 运行样式function系统。 有没有人有任何建议如何实现这个或更好的代码示例显示这种类型的东西工作?

Java使GUI等待计时器

我只是希望这个程序等待计时器。 我只想让程序暂停两秒钟。 我希望这个程序做的是显示“开始”,等待两秒钟直到计时器结束,然后显示“开始,完成等待,完成”。 如何让这个程序等待计时器完成? 我相信它当前在一个单独的线程中创建了计时器,而不是暂停主线程,所以它显示“Start,Finished”然后等待两秒钟,然后显示“Start,Finished,Finished Waiting”。 这不是我希望事情发生的顺序,我在运行GUI时找到了一个简单的计时器示例并且没有找到。 感谢您的帮助,以下是代码: import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JFrame; import javax.swing.JTextArea; import javax.swing.Timer; public class GUI extends JFrame { private static final long serialVersionUID = 3560258176733156660L; public static void main(String[] args) { new GUI().setVisible(true); } private Timer timer; private JTextArea area; private String text; public GUI() { setLayout(null); setSize(500, 120); […]

为什么Lock条件等待必须持有锁

我对此表示怀疑,在Java语言中,我们需要保持锁定,然后再等待满足某些条件。 例如,int java monitor lock: synchronized(lock){ System.out.println(“before lock …”); lock.wait(); System.out.println(“after lock …”); } 或者是黄色的工具。 Lock lock = new ReentrantLock(); Condition cond = lock.newCondition(); lock.lock(); try{ System.out.println(“before condition …”); cond.await(); System.out.println(“after condition …”); }catch(Exception e){ e.printStackTrace(); }finally{ lock.unlock(); } 所以,为什么我们不能等待,而不是锁定? 如果只是因为Java,其他语言的工作有所不同? 我希望你能在设计之后解释原因,但不仅仅是JAVA-SPEC的定义。

在关闭执行程序之前等待所有线程完成

这是我的代码片段。 ExecutorService executor = Executors.newFixedThreadPool(ThreadPoolSize); while(conditionTrue) { ClassImplementingRunnable c = new ClassImplementingRunnable(); executor.submit(c); } 现在这样做了 executor.shutdown(); 我想在这里实现的是,我想等待线程池中的所有线程完成执行,然后我想关闭执行程序。 但我想这不是这里发生的事情。 主线程似乎正在执行关闭,它只是关闭所有东西。 在我的线程池大小为2之前,我做了以下操作,它似乎工作。 ClassImplementingRunnable c1 = new ClassImplementingRunnable(); executor.submit(c1); ClassImplementingRunnable c2 = new ClassImplementingRunnable(); executor.submit(c2); Future f1 = executor.submit(c1); Future f2 = executor.submit(c2); while(!f1.done || !f2.done) {} executor.submit(); 我如何为线程池中的更multithreading执行此操作? 谢谢。

在Consumer和Producer Threads中等待并通知

刚开始学习multithreading。 我有多个线程的5个生产者和2个消费者。 基本上这个程序会在队列中添加100个项目。 当队列大小为100时,生产者将停止添加。我希望消费者在消费者从队列中删除所有项目时通知生产者,以便生产者可以再次开始添加。 目前生产者将等待,但永远不会得到消费者的通知。 制片人: public class Producer implements Runnable { private BlockingQueue sharedQueue; private final int queueSize; private Object lock = new Object(); public Producer(BlockingQueue sharedQueue, int queueSize){ this.sharedQueue = sharedQueue; this.queueSize = queueSize; } public void run() { while(true) { if(sharedQueue.size()== queueSize){ try { synchronized (lock) { sharedQueue.wait(); } } catch (InterruptedException […]