package test;
import java.util.Date;
import java.util.concurrent.LinkedBlockingQueue;
import org.apache.lucene.index.IndexWriter;
import com.index.bdo.IndexBusinessContextInterface;
import com.index.config.model.IndexSequenceInfo;
import com.index.enums.SeqRecStatusType;
import com.index.lucene.IndexModifier;
import com.index.worker.impl.CommonIndexWorker;
public class TestThread {
public static final int MAXIMUM_POOL_SIZE = 300;
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
Thread1 thread = new Thread1();
LinkedBlockingQueue queue = new LinkedBlockingQueue(MAXIMUM_POOL_SIZE);
thread.setQueue(queue);
//启动它
new Thread(thread).start();
//这里放入要处理的东西
Object o = new Object();
queue.put(o);
}
}
class Thread1 implements Runnable{
LinkedBlockingQueue queue;
private boolean interrupted = false;//是否被停止
public void setInterrupted(boolean interrupted) {
this.interrupted = interrupted;
}
public void setQueue(LinkedBlockingQueue queue) {
this.queue = queue;
}
public void run() {
try {
//------------------------------------------
Object businessObject = null;
int size = -1;
while (!interrupted) {
long startTime = new Date().getTime();
try {
if(size!=-1 && size-1<=0){//说明没有下一个了
Thread.sleep(1500);//休息
}
//记录下size
size = this.queue.size();
//取出队列里面的业务对象来处理
businessObject = this.queue.take();
try {
//执行业务处理逻辑
//XXXXXXXXXXXXx
//XXXXXXXXXXXXXXXXXXXx
} catch (Exception e) {
e.printStackTrace();
}finally{
//做些必要的处理
}
long endTime = new Date().getTime();
System.out.println("[线程队列]花费了" + (endTime - startTime) + " 毫秒来处理业务!");
} catch (Exception e) {
e.printStackTrace();
}
}//end while
//------------------------------------------
} catch (Exception e) {
e.printStackTrace();
}finally{
//最后
}//end finally
}
}
分享到:
相关推荐
单线程模型简化了程序设计,降低了程序复杂度,使得开发者可以更专注于业务逻辑的实现,而无需过多考虑多线程间的同步问题。 单线程的优势主要体现在以下几个方面: 1. **简化程序设计**:由于无需处理多线程间的...
**分片处理**:将大量数据分成若干个较小的片段,分别交给不同的线程处理,避免单个线程处理过多数据导致的内存溢出或处理时间过长等问题。分片大小和数量的计算是关键步骤之一。 ### 2. 实现过程 #### 2.1 初始化...
Java线程池是一种高效管理线程的机制,它允许开发者预先创建一定数量的线程,然后根据需求将任务提交到线程池中进行执行。线程池的核心在于它能够有效地控制运行的线程数量,避免因为频繁创建和销毁线程而产生的性能...
Java多线程导出Excel是处理大数据量时的一种高效策略,尤其在面对千万级别的数据时。传统的Apache POI库在处理大规模数据时可能会遇到栈溢出(StackOverflowError)和内存溢出(OutOfMemoryError)等问题,因为这些...
在Java编程中,任务线程处理是一种常见的并发编程模型,它允许我们利用多核处理器的优势,提高程序的执行效率。本示例将深入探讨如何在Java中实现基于任务的线程处理,包括线程的基本概念、任务调度以及队列的应用。...
创建Java线程主要有两种方式:继承Thread类和实现Runnable接口。继承Thread类可以直接重写run()方法,而实现Runnable接口则需要提供一个包含业务逻辑的run()方法,并通过构造Thread对象传入该Runnable实例。后者更为...
在Java编程中,多线程是一种常见的并发处理方式,它能充分利用CPU资源,提高程序的执行效率。本示例主要探讨了如何通过两种方法来控制Java中的线程数量,以达到优化性能和防止内存不足的目的。 首先,我们来看...
这种方式更符合Java的"单一职责原则",因为类可以专注于业务逻辑,而线程管理由Thread对象处理。这在需要多线程共享数据或避免单继承限制时尤其有用。 3. **线程同步**:在多线程环境下,数据安全和一致性是个挑战...
Java线程有五种状态:新建、可运行、运行、阻塞和终止。理解这些状态有助于我们更好地控制和调试多线程程序。 四、线程同步 线程同步是防止多个线程同时访问共享资源导致数据不一致的重要机制。Java提供了多种同步...
线程池是Java多线程处理的一种优化策略,通过复用已创建的线程来减少线程创建和销毁的开销。Java提供`ExecutorService`接口和`Executors`工厂类来创建线程池。常见的线程池类型有: 1. **FixedThreadPool**:固定...
本项目"Java Mybatis Maven多线程处理百万数据修改的小工具"正是为了解决这样的问题而设计的。它利用Mybatis作为持久层框架,结合Java的多线程特性,实现了对大量数据进行高效修改的功能。 Mybatis是Java领域广泛...
Java线程有10个优先级,从Thread.MIN_PRIORITY(1)到Thread.MAX_PRIORITY(10),但实际操作中,优先级的影响力并不大,操作系统调度策略可能会忽略优先级。 总之,理解和掌握Java多线程结构对于编写高效的并发...
在Java编程中,多线程安全集合是程序员在并发环境下处理数据共享时必须考虑的关键概念。这些集合确保了在多个线程访问时的数据一致性、完整性和安全性,避免了竞态条件、死锁和其他并发问题。Java提供了一系列的线程...
在Java编程领域,多线程技术是实现高效并发处理的核心机制。"JAVA多线程聊天工具"是一个基于Java实现的简单应用,它利用了多线程的概念来创建一个实时、互动的聊天环境。在这个聊天工具中,每个用户都可以在不同的...
本示例着重讨论如何利用多线程处理大批量耗时业务并确保能够获取每个任务的结果。标题中的"通过多线程任务处理大批量耗时业务并返回结果"指的是在Java或其他支持多线程的编程语言中,如何有效地分配工作到多个线程,...
生产者和消费者线程都需要有自己的业务逻辑,这可以通过重写`run()`方法实现。 2. **共享资源**:在生产者-消费者模型中,通常会有一个固定大小的缓冲区作为共享资源。可以使用数组或链表实现,但需要注意的是,当...
然而,多线程环境下的数据共享和操作可能会引发线程安全问题,如果不正确处理,可能导致数据不一致、程序崩溃等严重后果。本示例将探讨如何在Java中实现一个线程安全的订票系统。 首先,我们要理解什么是线程安全。...
2. **多线程处理**:使用Java的`ExecutorService`或`Thread`类创建线程池,当有新的OCR任务时,将其分配给空闲线程进行处理。 3. **Tesseract集成**:通过JNI(Java Native Interface)或Java的`ProcessBuilder`...
线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。使用线程池可以有效地控制运行的线程数量,避免过多线程导致系统资源过度消耗,同时也能简化线程的管理和回收。Java的...
多线程消费者可以将负载分散到多个线程上,每个线程处理一部分分区,从而提高消费速度。不过,多线程消费者需要妥善处理线程间同步问题,例如确保所有线程正确提交偏移量,以避免消息丢失或重复。 多线程消费者管理...