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);
}
}
}
分享到:
相关推荐
Java多线程小游戏是学习Java并发编程的一个经典实践案例,它可以帮助开发者深入理解线程的创建、同步、通信以及管理。在这个课程设计或毕业设计项目中,学生通常会被要求实现一个能够展示多线程特性的游戏,比如经典...
`BlockingQueue`是一种特殊类型的队列,主要用于多线程环境中的任务管理。它具有以下特性:当队列为空时,从队列中获取元素的操作会被阻塞;同样地,当队列满时,向队列中添加元素的操作也会被阻塞。这种特性使得`...
在IT行业中,多线程是程序设计中的一个重要概念,尤其在Java编程中,它被广泛应用于提高应用程序的并发性能和响应速度。本压缩包“多线程基础与基于多线程的简单聊天室”提供了对多线程技术的实践理解和二次开发的...
Java多线程设计模式是Java开发中的核心概念,它涉及到如何高效、安全地在多个执行线程之间共享资源和协调任务。设计模式是解决特定问题的成熟方案,它们是编程经验的结晶,可以帮助开发者在面临多线程挑战时快速找到...
通过学习《Java多线程编程实战指南》,开发者不仅可以理解多线程的基本概念,还能掌握如何在实际项目中运用多线程技术,提升程序的并发性能和稳定性。无论是初级开发者还是经验丰富的工程师,这本书都是一本值得阅读...
Java多线程是Java编程中的重要概念,尤其在如今的多核处理器环境下,理解并熟练掌握多线程技术对于提高程序性能和响应速度至关重要。本资料详细讲解了Java多线程的原理,并提供了丰富的实战代码,非常适合Java初学者...
在Java编程领域,多线程是面试中常见且重要的知识点,尤其对于系统设计和高并发处理的岗位至关重要。本文将围绕“多线程面试题”这一主题,深入探讨相关概念、技术及其应用。 1. **线程的概念**:线程是程序执行的...
死锁是多线程中的一个常见问题,当两个或更多线程相互等待对方释放资源而无法继续执行时,就会发生死锁。为避免死锁,我们需要遵循一些原则,如避免循环等待,或者使用死锁检测和预防算法。 Java还提供了一些线程池...
此外,Java 5引入了BlockingQueue阻塞队列,它是一种线程安全的数据结构,线程可以等待队列中有数据可取或等待队列有空位可存,常用于生产者-消费者模型。 线程阻塞是指线程在运行过程中因为某些原因无法继续执行,...
《Java多线程编程实战指南-核心篇》是一本深入探讨Java并发编程的书籍,旨在帮助读者掌握在Java环境中创建、管理和同步线程的核心技术。Java的多线程能力是其强大之处,使得开发者能够在同一时间执行多个任务,提高...
在Java编程中,多线程并发是提升程序执行效率、充分利用多核处理器资源的重要手段。本文将基于"java 多线程并发实例"这个主题,深入探讨Java中的多线程并发概念及其应用。 首先,我们要了解Java中的线程。线程是...
在IT行业中,多线程是Java编程中一个重要的高级特性,尤其对于开发高效能和响应迅速的应用至关重要。这个“多线程终极案例程序”旨在帮助Java开发者深化对多线程的理解,通过一个具体的“多兵种联合攻击防御塔”游戏...
在Java编程中,`BlockingQueue`(阻塞队列)是一种重要的并发工具,它结合了队列的数据结构和线程同步机制。`BlockingQueue`接口位于`java.util.concurrent`包中,提供了线程安全的数据结构,可以用于实现生产者-...
7. **线程间通信**:使用`BlockingQueue`或`Future`可以实现线程间的通信,例如,一个线程负责读取文件块并放入队列,另一个线程从队列中取出并发送。 8. **性能调优**:合理设置线程池大小、考虑使用NIO(非阻塞I/...
put()方法将对象添加到BlockingQueue中,如果BlockingQueue没有空间,线程将被阻断直到BlockingQueue有空间。offer()方法尝试将对象添加到BlockingQueue中,如果BlockingQueue可以容纳,则返回true,否则返回false。...
在编程领域,多线程是实现并发执行任务的关键技术,特别是在服务器端开发和高并发应用中,多线程能够充分利用CPU资源,提高程序的运行效率。这个名为"多线程demo程序-轻松掌握多线程技术"的项目,旨在帮助开发者理解...
生产者消费者模型是一种常见的线程间协作模式,通过BlockingQueue实现,生产者线程向队列中添加元素,消费者线程从队列中取出元素。还有读者写者模式,允许多个读者同时读取资源,但只允许一个写者进行修改,可以...
标题中的“关于多线程的专用书籍是真的”表明这是一本专门探讨多线程编程的书籍,而描述中的“多线程的专用书籍这是很好的”进一步确认了这本书的专业性和价值。多线程是计算机编程中一个重要的概念,尤其是在并发...
Java多线程是Java编程中的核心概念,它允许程序同时执行多个任务,提高了系统的效率和响应性。在Java中,多线程的实现主要通过两种方式:继承Thread类和实现Runnable接口。理解并掌握多线程的使用对于任何Java开发者...
在IT领域,多线程和高并发是两个关键概念,特别是在Java编程中,它们对于构建高效、可扩展的系统至关重要。下面将详细解释这两个概念及其在Java中的实现和应用。 多线程是指在一个应用程序中同时运行多个独立的执行...