`
lijunjie
  • 浏览: 388503 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

blockingQueue多线程中的小列子

阅读更多

package com.demo;

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;

import org.apache.log4j.Logger;

/**
 * QueueThread.java,2009-11-17,lijunjie
 *
 * MessageService project is a  Value-added service Platform base on
 *  message  application
 *
 * Copyright (c) 2009-2012 95OL Beijing  Inc
 * All right reserved.
 * This software is the proprietary information of 95ol, Inc.
 *
 */

public abstract class QueueThread  {
	private BlockingQueue blockQueue=new LinkedBlockingQueue();
	static Logger logger=Logger.getLogger(QueueThread.class);

	private Thread thread=null;
	private String name=null;


	public void setQueue(BlockingQueue blockQueue)
	{
		this.blockQueue=blockQueue;
	}
	
	protected BlockingQueue getQueue()
	{
		return this.blockQueue;
	}

	
	private Thread getThread()
	{
		if(thread==null)
		{
		thread=new Thread(){
			public void run()
			{
				QueueThread.this.run();
			}
		};
		}
		
		return thread;
	}
	public void add(Object o)
	{
		try {
			blockQueue.put(o);
			
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public void run() {
		while(true)
		{
			try{
				
				Object o=blockQueue.take();
				handle(o);
			}
			catch(InterruptedException e)
			{
				e.printStackTrace();
			}
			
			
		}
		// TODO Auto-generated method stub
		
	}
	
	public abstract void handle(Object o);
	
	public String toString()
	{
		return "Thread name:"+name+",Queue size:"+blockQueue.size();
	}
	
	public QueueThread setName(String name)
	{
		this.name=name;
		this.getThread().setName(name);
		return this;
	}
	
	public QueueThread setPriority(int prio)
	{
		this.getThread().setPriority(prio);
		return this;
		
	}
	
	public QueueThread start()
	{
		this.getThread().setPriority(Thread.NORM_PRIORITY);
		this.getThread().start();
		return this;
	}
	
	
	public static void main(String[] args)
	{
		BlockingQueue blockingQueue=new LinkedBlockingQueue();
		QueueThread queueThread=new QueueThread(){
			public void handle(Object o)
			{
				System.out.println(">>>"+o);
			}
		};
		queueThread.setName("test").setQueue(blockingQueue);
		queueThread.start();
		
		
		for(int i=0;i<100;i++)
		{
			ProductThread pt=new ProductThread(queueThread);
			pt.start();
		}
		
	}
	

}


class ProductThread extends Thread
{
	BlockingQueue blockingQueue=null;
	public ProductThread(QueueThread queueThread)
	{
		blockingQueue=queueThread.getQueue();
	}
	
	public void run()
	{
		for(int i=0;i<10;i++)
		{
			System.out.println("<<<"+i);
			blockingQueue.add(i);
		}
	}
}



0
0
分享到:
评论

相关推荐

    java 多线程的小游戏 Java 课程设计 Java毕业设计 多线程的小游戏 经典

    Java多线程小游戏是学习Java并发编程的一个经典实践案例,它可以帮助开发者深入理解线程的创建、同步、通信以及管理。在这个课程设计或毕业设计项目中,学生通常会被要求实现一个能够展示多线程特性的游戏,比如经典...

    多线程基础与基于多线程的简单聊天室

    在IT行业中,多线程是程序设计中的一个重要概念,尤其在Java编程中,它被广泛应用于提高应用程序的并发性能和响应速度。本压缩包“多线程基础与基于多线程的简单聊天室”提供了对多线程技术的实践理解和二次开发的...

    java 多线程编程实战指南(核心 + 设计模式 完整版)

    通过学习《Java多线程编程实战指南》,开发者不仅可以理解多线程的基本概念,还能掌握如何在实际项目中运用多线程技术,提升程序的并发性能和稳定性。无论是初级开发者还是经验丰富的工程师,这本书都是一本值得阅读...

    java多线程的讲解和实战

    Java多线程是Java编程中的重要概念,尤其在如今的多核处理器环境下,理解并熟练掌握多线程技术对于提高程序性能和响应速度至关重要。本资料详细讲解了Java多线程的原理,并提供了丰富的实战代码,非常适合Java初学者...

    简单多线程实例简单多线程实例简单多线程实例

    在编程领域,多线程是实现并发执行任务的关键技术,特别是在资源丰富的现代计算机系统中。本文将深入探讨“简单多线程实例”,旨在帮助你理解并掌握如何在实际项目中运用多线程。 多线程是指在一个程序内同时运行多...

    多线程面试题

    在Java编程领域,多线程是面试中常见且重要的知识点,尤其对于系统设计和高并发处理的岗位至关重要。本文将围绕“多线程面试题”这一主题,深入探讨相关概念、技术及其应用。 1. **线程的概念**:线程是程序执行的...

    JAVA多线程编程技术PDF

    死锁是多线程中的一个常见问题,当两个或更多线程相互等待对方释放资源而无法继续执行时,就会发生死锁。为避免死锁,我们需要遵循一些原则,如避免循环等待,或者使用死锁检测和预防算法。 Java还提供了一些线程池...

    线程----BlockingQueue

    线程----BlockingQueue 的介绍说明

    java多线程经典案例

    此外,Java 5引入了BlockingQueue阻塞队列,它是一种线程安全的数据结构,线程可以等待队列中有数据可取或等待队列有空位可存,常用于生产者-消费者模型。 线程阻塞是指线程在运行过程中因为某些原因无法继续执行,...

    java 多线程并发实例

    在Java编程中,多线程并发是提升程序执行效率、充分利用多核处理器资源的重要手段。本文将基于"java 多线程并发实例"这个主题,深入探讨Java中的多线程并发概念及其应用。 首先,我们要了解Java中的线程。线程是...

    多线程终极案例程序(多线程进阶)

    在IT行业中,多线程是Java编程中一个重要的高级特性,尤其对于开发高效能和响应迅速的应用至关重要。这个“多线程终极案例程序”旨在帮助Java开发者深化对多线程的理解,通过一个具体的“多兵种联合攻击防御塔”游戏...

    java中线程队列BlockingQueue的用法

    在Java编程中,`BlockingQueue`(阻塞队列)是一种重要的并发工具,它结合了队列的数据结构和线程同步机制。`BlockingQueue`接口位于`java.util.concurrent`包中,提供了线程安全的数据结构,可以用于实现生产者-...

    java实现多线程文件传输

    7. **线程间通信**:使用`BlockingQueue`或`Future`可以实现线程间的通信,例如,一个线程负责读取文件块并放入队列,另一个线程从队列中取出并发送。 8. **性能调优**:合理设置线程池大小、考虑使用NIO(非阻塞I/...

    Java多线程工具篇BlockingQueue的详解

    put()方法将对象添加到BlockingQueue中,如果BlockingQueue没有空间,线程将被阻断直到BlockingQueue有空间。offer()方法尝试将对象添加到BlockingQueue中,如果BlockingQueue可以容纳,则返回true,否则返回false。...

    多线程demo程序-轻松掌握多线程技术

    在编程领域,多线程是实现并发执行任务的关键技术,特别是在服务器端开发和高并发应用中,多线程能够充分利用CPU资源,提高程序的运行效率。这个名为"多线程demo程序-轻松掌握多线程技术"的项目,旨在帮助开发者理解...

    java多线程详解(比较详细的阐述了多线程机制)

    生产者消费者模型是一种常见的线程间协作模式,通过BlockingQueue实现,生产者线程向队列中添加元素,消费者线程从队列中取出元素。还有读者写者模式,允许多个读者同时读取资源,但只允许一个写者进行修改,可以...

    关于多线程的专用书籍是真的

    标题中的“关于多线程的专用书籍是真的”表明这是一本专门探讨多线程编程的书籍,而描述中的“多线程的专用书籍这是很好的”进一步确认了这本书的专业性和价值。多线程是计算机编程中一个重要的概念,尤其是在并发...

    Java多线程练习题

    Java多线程是Java编程中的核心概念,它允许程序同时执行多个任务,提高了系统的效率和响应性。在Java中,多线程的实现主要通过两种方式:继承Thread类和实现Runnable接口。理解并掌握多线程的使用对于任何Java开发者...

    多线程,高并发.zip

    在IT领域,多线程和高并发是两个关键概念,特别是在Java编程中,它们对于构建高效、可扩展的系统至关重要。下面将详细解释这两个概念及其在Java中的实现和应用。 多线程是指在一个应用程序中同时运行多个独立的执行...

    BlockingQueue队列自定义超时时间取消线程池任务

    在Java编程中,`BlockingQueue`是一个非常重要的并发工具类,它主要用于线程间的数据通信。`newFixedThreadPool`是`java.util.concurrent`包中的一个线程池工厂方法,用于创建固定数量线程的线程池。`FutureTask`则...

Global site tag (gtag.js) - Google Analytics