package com.robustel.test.thread;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import java.util.concurrent.CountDownLatch;
public class Driver {
static Integer betch = 5;
static Integer threadNum = 5;
public static CountDownLatch latch = new CountDownLatch(threadNum);
private static List<String> operaSet = Collections.synchronizedList(new ArrayList<String>(betch));
static CountDownLatch startSignal = new CountDownLatch(1);
static CountDownLatch doneSignal = new CountDownLatch(5);
private static List<Thread> pools = new ArrayList<Thread>(1024);
private static Integer num = 100;
public static void main(String[] args) throws InterruptedException {
// 依次创建并启动5个worker线程
overTimeProcess();
System.out.println("Driver is doing something...");
System.out.println("Driver is Finished, start all workers ...");
startSignal.countDown(); // Driver执行完毕,发出开始信号,使所有的worker线程开始执行
doneSignal.await(); // 等待所有的worker线程执行结束
System.out.println("Finished.");
System.out.println(operaSet.size());
}
public static void overTimeProcess() {
// 依次创建并启动5个worker线程
if(pools.size()<=0){
for (int i = 0; i < 5; ++i) {
Thread t = new Thread(new Worker(startSignal, doneSignal));
pools.add(t);
t.start();
}
}
//初始化数据
for(int i=0;i<100;i++){
operaSet.add("data:"+"-"+i);
}
}
public static void doWork(String name){
while(operaSet.size() >0){
String md = operaSet.remove(0);
sendModuleData(md,name);
//数据处理完毕 需要新增
//addTasks();
}
}
private static void sendModuleData(String md,String name){
System.out.println(name +":op :"+ md);
}
//新增处理数据
public static void addTasks(){
if(operaSet.size()<=0){
for(int i=num;i<num+10;i++){
operaSet.add("data:"+"-"+i);
}
num +=10;
}
}
static class Worker implements Runnable{
private final CountDownLatch startSignal;
private final CountDownLatch doneSignal;
@SuppressWarnings("unused")
public Worker(CountDownLatch startSignal, CountDownLatch doneSignal) {
this.startSignal = startSignal;
this.doneSignal = doneSignal;
}
public void run() {
try {
startSignal.await(); // 等待Driver线程执行完毕,获得开始信号
doWork(Thread.currentThread().getName());
doneSignal.countDown(); // 当前worker执行完毕,释放一个完成信号
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
分享到:
相关推荐
java多线程实现生产者和消费者
java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型...
编写一个“生产者-消费者”的多线程演示程序,两个生产者,一个消费者,可以存放产品的仓库容量为10,仓库用栈实现,并有同步功能,且能防止先消费后生产的情况。
Java多线程编程实战指南(核心篇) 高清pdf带目录 随着现代处理器的生产工艺从提升处理器主频频率转向多核化,即在一块芯片上集成多个处理器内核(Core),多核处理器(Multicore Processor)离我们越来越近了――如今...
Java线程:并发协作-生产者消费者模型 Java线程:并发协作-死锁 Java线程:volatile关键字 Java线程:新特征-线程池 Java线程:新特征-有返回值的线程 Java线程:新特征-锁(上) Java线程:新特征-锁(下) ...
详细的讲述了多线程的各种用法 Java线程:概念与原理 Java线程:创建与启动 Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠...
Java线程:概念与原理 2 一、操作系统中线程和进程的概念 2 二、Java中的线程 3 三、Java中关于线程的名词解释...Java线程:并发协作-生产者消费者模型 52 Java线程:并发协作-死锁 55 Java线程:线程之间的数据传递 58
java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现...
代码里面包含一个并发4个线程同时运行 全部开始 全部停止 单个停止还有点问题。 还有生产者消费者 里面的里面能帮助你理解多线程的运用!
java多线程实现生产者消费者关系,完成线程之间的同步。
生产者消费者模式是java多线程经典的安全,它用到了同步,资源共享,wait,notify等技术。
《Java多线程编程实战指南(核心篇)》以基本概念、原理与方法为主线,辅以丰富的实战案例和生活化实例,并从Java虚拟机、操作系统和硬件多个层次与角度出发,循序渐进、系统地介绍Java平台下的多线程编程核心技术及...
用java多线程,实现生产者消费者同步和互斥的问题,操作系统中的经典问题
由生产者/消费者问题看JAVA多线程,让我们更加的了解多线程问题
java 多线程生产者消费者模型demo
java多线程学习,生产者消费者问题示例
java 多线程 生产者消费者模式,你值得拥有