`
annan211
  • 浏览: 448014 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java 多线程消费

阅读更多
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多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型...

    Java多线程实现生产者消费者

    编写一个“生产者-消费者”的多线程演示程序,两个生产者,一个消费者,可以存放产品的仓库容量为10,仓库用栈实现,并有同步功能,且能防止先消费后生产的情况。

    Java多线程编程实战指南(核心篇)

    Java多线程编程实战指南(核心篇) 高清pdf带目录 随着现代处理器的生产工艺从提升处理器主频频率转向多核化,即在一块芯片上集成多个处理器内核(Core),多核处理器(Multicore Processor)离我们越来越近了――如今...

    Java多线程编程总结

    Java线程:并发协作-生产者消费者模型 Java线程:并发协作-死锁 Java线程:volatile关键字 Java线程:新特征-线程池 Java线程:新特征-有返回值的线程 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实现多线程经典模型生产者消费java实现...

    java 多线程并发实例

    代码里面包含一个并发4个线程同时运行 全部开始 全部停止 单个停止还有点问题。 还有生产者消费者 里面的里面能帮助你理解多线程的运用!

    java多线程实现生产者消费者关系

    java多线程实现生产者消费者关系,完成线程之间的同步。

    java多线程(生产者与消费者)

    生产者消费者模式是java多线程经典的安全,它用到了同步,资源共享,wait,notify等技术。

    java多线程编程实战指南 核心篇 代码

    《Java多线程编程实战指南(核心篇)》以基本概念、原理与方法为主线,辅以丰富的实战案例和生活化实例,并从Java虚拟机、操作系统和硬件多个层次与角度出发,循序渐进、系统地介绍Java平台下的多线程编程核心技术及...

    java多线程实现生产者消费者问题

    用java多线程,实现生产者消费者同步和互斥的问题,操作系统中的经典问题

    由生产者/消费者问题看JAVA多线程

    由生产者/消费者问题看JAVA多线程,让我们更加的了解多线程问题

    java 多线程生产者消费者模型demo

    java 多线程生产者消费者模型demo

    java多线程生产者消费者问题示例

    java多线程学习,生产者消费者问题示例

    java 多线程 生产者消费者模式

    java 多线程 生产者消费者模式,你值得拥有

Global site tag (gtag.js) - Google Analytics