`

线程的运用

阅读更多
package com.gctx.schedule;

import java.util.ArrayList;
import java.util.List;

import com.gctx.business.interfaces.IGreetExpService;
import com.gctx.business.interfaces.IGreetPlanService;
import com.gctx.framework.logs.Logit;
import com.zr.pojo.aged.home.ZaghGreetExp;
import com.zr.pojo.aged.home.ZaghGreetPlanExp;



/*********************************************************
* 生成短信任务主线程
*@author zhanjunwei
*
*@since Nov 14, 2011 3:42:12 PM
*
*********************************************************/
public class CreateMessageRootThread implements Runnable {

private Long defPollingTime = 30 * 60 * 1000L;//默认轮询时间

private Integer defMaxvectorLength = 1000;//默认队列大小

private Integer defMaxvectorNum = 10; //默认队列个数
/**---
* 新加
*/
private IGreetExpService igreetexpservice;
private IGreetPlanService igreetplanservice;

public IGreetPlanService getIgreetplanservice() {
return igreetplanservice;
}

public void setIgreetplanservice(IGreetPlanService igreetplanservice) {
this.igreetplanservice = igreetplanservice;
}

public IGreetExpService getIgreetexpservice() {
return igreetexpservice;
}

public void setIgreetexpservice(IGreetExpService igreetexpservice) {
this.igreetexpservice = igreetexpservice;
}



/**---
* 新加
*/

CreateMessageSlaveThread[] createMessageSlaveThreads;
/**
* 构造函数
* @param pollingTime
* @param maxvectorLength
* @param maxvectorNum
*/
public CreateMessageRootThread(Long pollingTime, Integer maxvectorLength,
Integer maxvectorNum ){
this.defPollingTime = pollingTime;
this.defMaxvectorLength = maxvectorLength;
this.defMaxvectorNum = maxvectorNum;
init();
}

public void init() {
createMessageSlaveThreads = new CreateMessageSlaveThread[this.defMaxvectorNum];
for (int i = 0; i < this.defMaxvectorNum; i++) {
CreateMessageSlaveThread createMessageSlaveThread = new CreateMessageSlaveThread();
this.createMessageSlaveThreads[i] = createMessageSlaveThread;
createMessageSlaveThread.start();
}
}

public List<Object> polling() {
//轮询待生成报告列表
// List<Object> list = new ArrayList<Object>();
//
// list.add("111");
// list.add("112");
// list.add("113");
// list.add("114");
List<Object> list = new ArrayList<Object>();
/**
* 获取无计划的列表
*/
List<ZaghGreetExp> greetExpList=igreetexpservice.getAllSendRecordList();
for (ZaghGreetExp zaghGreetExp : greetExpList) {
list.add(zaghGreetExp);
}
System.out.println(greetExpList.size());
List<ZaghGreetPlanExp> greetPlanList=igreetplanservice.getSendGreetPlanList();
for (ZaghGreetPlanExp zaghGreetPlanExp : greetPlanList) {
list.add(zaghGreetPlanExp);

}
System.out.println("--------------------------------------");

return list;
}

public void distributeTask() {
//分发任务
List<Object> list = polling();
if (list == null) {
return;
}
for (Object geu : list) {
int vectorNum = getModuleValue(geu.toString());
if (this.createMessageSlaveThreads[vectorNum].getVectorCount() < defMaxvectorLength) {
this.createMessageSlaveThreads[vectorNum].addTask(geu);
}
}
}

private int getModuleValue(String key) {
long hashCode = (long) key.hashCode();

if (hashCode < 0)
hashCode = -hashCode;
return (int) hashCode % defMaxvectorNum;
}


public void run() {
while (true) {
try {
Logit.debugLog("CreateReportMailRootThread is runing");
distributeTask();
Thread.sleep(defPollingTime);
} catch (Exception e) {
Logit.debugLog("Exception is " + e.getMessage());
continue;
}
}

}

}
分享到:
评论

相关推荐

    iOS 多线程运用

    本文将深入探讨iOS多线程的运用,通过分析提供的3个Demo,来帮助开发者更好地理解和应用多线程。 一、基础概念 1. 主线程:在iOS中,主线程主要负责处理UI更新和事件响应,确保用户界面的流畅性。所有与UI相关的...

    C#线程运用

    C#线程运用涉及到多线程编程的关键概念和技术,这些技术对于构建高效的并发和并行应用至关重要。下面将详细讨论C#线程的核心知识点。 1. **线程创建**: - 使用`System.Threading.Thread`类可以创建新的线程。通过...

    JAVA多线程运用

    1. 建立三个线程,并且同时运行它们。当运行时输出线程的名称。 实验步骤: (1)、创建类sy6_1 (2)、创建三个线程,调用start()方法启动这三个线程 (3)、保存文件,调试并编译运行程序。 参考程序运行效果: 2....

    易语言多线程的运用

    易语言是一种基于中文编程的计算机程序设计语言,它旨在降低编程难度,使更多人能够接触编程。在易语言中,多线程技术是一项重要的...通过实践和学习易语言的多线程运用,开发者可以提升程序性能,解决复杂的并发问题。

    超线程技术和粗粒度多线程技术

    超线程技术的缺点是因为超线程技术是对多任务处理有优势,因此当运行单线程运用软件时,超线程技术将会降低系统性能,尤其是在多线程操作系统运行单线程软件时将容易出现此问题。 超标量技术是指流水型标量处理器能...

    易语言多线程的运用例程

    在本例程中,我们将深入探讨“易语言多线程的运用”,这是在多核处理器环境下提高程序执行效率的重要技术。 首先,我们要理解什么是线程。线程是操作系统分配CPU时间的基本单元,一个进程可以包含一个或多个线程。...

    多线程的运用e语言多线程 e多线程

    在编程领域,多线程是一种重要的并发执行机制,它允许程序同时执行多个任务,从而提高系统资源利用率和程序响应速度。E语言(可能是错误输入或者是某个特定编程环境或语言的简称)中的多线程功能也不例外。本文将...

    mybaits 多线程 实现数据批量插入 (运用CountDownLatch实现闭锁)

    进入主题,`多线程`与`闭锁`的运用。在Java并发编程中,`CountDownLatch`是一个同步辅助类,它允许多个线程等待其他线程完成操作。在批量插入数据的场景下,可以创建一个CountDownLatch对象,初始化为线程的数量,每...

    多线程的运用

    标题“多线程的运用”揭示了我们将探讨如何在实际项目中有效地利用多线程。 描述中提到,多线程的主要目的是提高资源使用效率,进而提升系统的整体效率,而不是单纯追求运行速度的提升。这是因为,单个线程在执行...

    多线程完整(C#),综合概念与例子,详细讲述多线程的运用

    在IT领域,尤其是在软件开发中,多线程是不可或缺的一部分,尤其在C#编程语言中。多线程允许一个程序同时执行多个不同的任务,从而提高了...在实际开发中,还需要根据具体需求灵活运用,确保代码的健壮性和可维护性。

    vc++中的线程锁(线程锁保持线程同步)

    在VC++编程环境中,线程同步是一个至关重要的概念,特别是在多线程程序设计中,以确保并发执行的线程能够安全地访问...在提供的源码文件中,我们可以深入学习线程锁的实现细节,以及如何在实际项目中有效地运用它们。

    CVI 线程锁、线程安全变量实例

    理解并熟练运用这些概念和技术,可以帮助你在LabWindows/CVI环境中编写出高效且稳定的多线程应用程序,避免因数据不一致或竞态条件而导致的问题。在实践中,要注意合理分配资源,避免死锁,以及对线程性能的优化,...

    运用多线程编程球体游戏

    在“运用多线程编程球体游戏”这个项目中,开发者利用多线程来实现一个动态且交互式的视觉效果。这个游戏的核心概念是创建了五个独立的小球,这些小球在屏幕上同时向上移动,直到它们到达页面的顶端。 首先,我们要...

    打字游戏 运用多线程实现

    本项目“打字游戏 运用多线程实现”是一个采用C#语言编写的教学示例,旨在帮助初学者理解并掌握多线程技术在实际应用中的运用。 首先,我们来详细解析多线程的概念。在单线程程序中,所有的任务都在同一个执行序列...

    C#C#多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例)

    在C#编程中,多线程是一个核心概念,特别是...在实际开发中,理解和熟练运用这些技术,能够编写出高效、稳定且线程安全的C#程序。通过提供的压缩包文件,可以深入学习和实践这些实例,进一步提升对C#多线程编程的理解。

    线程异步工作,当一个线程结束时异步通知另一线程

    在多线程编程中,线程间的协作是关键任务之一,尤其当需要一个线程在完成特定工作后通知另一个线程继续执行时。...正确理解和运用这些工具,能够帮助开发者优化系统性能,减少资源浪费,提升用户体验。

    Android开发中的多线程编程技术

    资源包中的"Android开发中的多线程编程技术.docx"可能包含各种多线程编程的实例代码和详细解释,有助于深入理解如何在实践中运用多线程技术。 六、Android反汇编工具包 此资源可能包含用于分析和调试Android应用的...

    QT线程及多线程

    通过深入理解和熟练运用这些工具,开发者能够编写出高效、稳定且用户友好地多线程应用程序。在大型项目中,合理的线程管理不仅可以提升程序性能,还能显著改善用户体验。因此,对QT线程及多线程的掌握对于任何Qt...

Global site tag (gtag.js) - Google Analytics