在java中使用线程进行并行处理
我需要在我的程序中同时运行几个函数.这些进程返回记录.但是,一个的输出是另一个的输入.在这种情况下,如果在一个时间点,函数A需要一些时间将一些记录输出到函数B,我需要函数B等待,直到函数A提供一些记录作为该过程的输入.我可以通过使用等待,连接等线程功能来实现这一点.或者是否有任何其他方法来实现相同的功能.
编辑: 解决方法
如上所述,您可以使用阻塞队列与生产者使用者
要么 您可以使用java并发的倒计时锁存来解决您的问题. CountDownLatch如何工作? CountDownLatch.java类定义了一个构造函数: //构造一个用给定计数初始化的CountDownLatch. public void CountDownLatch(int count) {...} 这个计数本质上就是锁存器应该等待的线程数.此值只能设置一次,而CountDownLatch不提供其他机制来重置此计数. 与CountDownLatch的第一次交互是主线程,它是等待其他线程的goind.这个主线程必须在启动其他线程后立即调用CountDownLatch.await()方法.执行将在await()方法上停止,直到其他线程完成执行. 其他N个线程必须引用latch对象,因为它们需要通知CountDownLatch对象它们已经完成了它们的任务.此通知通过以下方法完成:CountDownLatch.countDown();每次调用方法都会减少构造函数中设置的初始计数,因此,当所有N个线程都调用此方法时,count会达到零,并允许主线程通过await()方法恢复执行. 下面是一个简单的例子.在Decrementer之后调用了countDown()3次 CountDownLatch,the waiting Waiter is released from the await() call. CountDownLatch latch = new CountDownLatch(3); Waiter waiter = new Waiter(latch); Decrementer decrementer = new Decrementer(latch); new Thread(waiter) .start(); new Thread(decrementer).start(); Thread.sleep(4000); public class Waiter implements Runnable{ CountDownLatch latch = null; public Waiter(CountDownLatch latch) { this.latch = latch; } public void run() { try { latch.await(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Waiter Released"); } } public class Decrementer implements Runnable { CountDownLatch latch = null; public Decrementer(CountDownLatch latch) { this.latch = latch; } public void run() { try { Thread.sleep(1000); this.latch.countDown(); Thread.sleep(1000); this.latch.countDown(); Thread.sleep(1000); this.latch.countDown(); } catch (InterruptedException e) { e.printStackTrace(); } } } 在您的情况下,您可以使用callable来创建线程而不是runnable,因为您需要从一个线程获取retrun值并且必须将该值传递给第二个线程. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- java正则表达式验证函数
- Java的wait(), notify()和notifyAll()使用心得
- 从java GWT代码调用.js文件的Javascript函数
- JavaWeb---js转json and json 转js
- java – tomcat7与tomcat6,性能有什么显着差异?
- java – Spring IllegalStateException:JTA EntityManager
- java – 如何在Eclipse RCP应用程序中创建可滚动视图?
- java – 一起进行多线程和递归
- java – for循环的“count limit”表达式只会被评估一次,还
- Java – 红色,绿色,蓝色到getRGB