`
lionzm
  • 浏览: 12556 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

CountDownLatch实战

阅读更多
背景:单线程起动一个loader,loader中分多线程计算
1.单线程起loader,省略
2.多线程loader代码,AbstractDataCounterLoader 启动的线程,run 方法中抽象出calc 让子类实现
public class MutiThreadLoader extends AbstractDataCounterLoader {
	private static final Logger logger = LoggerFactory.getLogger(MutiThreadLoader.class);

	/**
	 * 线程数
	 */
	private int mutiThreadNum = 0;
	
	/**
	 * 处理类名
	 */
	private String handlerClassName;

	@Override
	protected boolean calc() {

		if (mutiThreadNum < 1) {
			return false;
		}
		CountDownLatch countDownLatch = new CountDownLatch(mutiThreadNum);
		List<AbstractHandler> mutiThreadLoaders = getMutiThreadLoaders(countDownLatch,
				mutiThreadNum);
		if (null == mutiThreadLoaders){
			return false;
		}
		ExecutorService exec = Executors.newFixedThreadPool(mutiThreadNum);
		for (int i = 0; i < mutiThreadNum; i++) {
			exec.submit(mutiThreadLoaders.get(i));
		}
		try {
			countDownLatch.await();
		} catch (InterruptedException e) {
			logger.error("InterruptedException:", e);
		}
		exec.shutdown();
		System.out.println("end");
		
		return true;
	}

	protected List<AbstractHandler> getMutiThreadLoaders(CountDownLatch countDownLatch,
			int mutiThreadNum) {
		List<AbstractHandler> mutiThreadLoaders = new ArrayList<AbstractHandler>();
		for (int i = 0; i < mutiThreadNum; i++) {
			AbstractHandler handler = getHandler();
			if (null == handler){
				return null;
			}
			handler.setThreadNum(i);
			handler.setCountDownLatch(countDownLatch);
			mutiThreadLoaders.add(handler);
		}
		return mutiThreadLoaders;
	}

	// 获得具体的处理类
	protected AbstractHandler getHandler(){
		AbstractHandler handler = null;
		try {
			handler = (AbstractHandler) Class.forName(handlerClassName).newInstance();
		} catch (InstantiationException e) {
			logger.error("getHandler error",e);
		} catch (IllegalAccessException e) {
			logger.error("getHandler error",e);
		} catch (ClassNotFoundException e) {
			logger.error("getHandler error",e);
		}
		return handler;
	}

	public int getMutiThreadNum() {
		return mutiThreadNum;
	}

	public void setMutiThreadNum(int mutiThreadNum) {
		this.mutiThreadNum = mutiThreadNum;
	}

	public String getHandlerClassName() {
		return handlerClassName;
	}

	public void setHandlerClassName(String handlerClassName) {
		this.handlerClassName = handlerClassName;
	}

}


2.spring配置
Xml配置例子:
<bean id="mutithreadLoaderTest" class="com.loader.muti.MutiThreadLoader">
                   <property name="dealTmRecordDao" ref="dealTmRecordDao"/>
                   <property name="spoutType" value=" mutithreadLoaderTest "/>
                   <!—主线程的loader频率—>
                   <property name="clacIntervalMinute" value="1"/>
        <!—线程数量—>
<property name="mutiThreadNum" value="10"/>
                   <!—具体的业务实现类名 这个类需要继承AbstractHandler—>
                   <property name="handlerClassName" value="com.loader.muti.HandlerTest"/>
         </bean>
3.业务实现类需要继承comloader.muti.AbstractHandler 实现execute方法
public class HandlerTest extends AbstractHandler{

	@Override
	protected void execute(int threadNum) {
		try {
			Thread.currentThread().sleep(1000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("---" + threadNum);
	}

}
分享到:
评论

相关推荐

    countdownlatch-example-sourcecode.zip

    《CountDownLatch实战解析与源码探索》 CountDownLatch是Java并发编程中一个非常重要的同步工具类,它在多线程协作场景中起到了关键的作用。在`countdownlatch-example-sourcecode.zip`这个压缩包中,我们可以看到...

    java并发编程实战源码,java并发编程实战pdf,Java

    3. **并发控制**:Java提供了多种并发控制工具,包括synchronized、wait()、notify()、notifyAll()、ReentrantLock(可重入锁)、Semaphore(信号量)和CountDownLatch(倒计时器)等。这些工具用于协调不同线程的...

    java开发实战经典

    6. **多线程**:讲解线程的创建方式(Thread类和Runnable接口)、线程同步(synchronized关键字、wait/notify机制、Lock锁)以及并发工具类如Semaphore、CountDownLatch等。 7. **网络编程**:包括Socket编程,理解...

    《java 并发编程实战高清PDF版》

    其中包括`Semaphore`(信号量)用于限制同时访问特定资源的线程数量,`CountDownLatch`(倒计时器)用于一次性阻塞多个线程,直到某个事件发生,以及`CyclicBarrier`(循环栅栏)让一组线程等待其他线程到达特定点后...

    Java 并发编程实战.pdf

    - **并发工具类**:如CountDownLatch、CyclicBarrier等,这些工具类可以帮助开发者更方便地控制线程间的协作。 - **线程池**:详细介绍如何合理使用线程池,包括固定大小的线程池、缓存线程池、定时线程池等,并分析...

    汪文君JAVA多线程编程实战(完整不加密)

    本书还涉及到了Java并发工具类,如Semaphore信号量、CyclicBarrier栅栏、CountDownLatch倒计时器等,这些都是Java并发编程中的重要工具,可以帮助开发者更精细地控制线程执行。另外,书中还会介绍如何使用Future和...

    java项目开发实战

    - `CountDownLatch`、`CyclicBarrier`等。 ### 实战案例分析 #### 1. Web应用开发 - **Spring Boot简介**: - 快速构建独立的Spring应用; - 内嵌Tomcat服务器,简化部署流程。 - **RESTful API设计**: - 使用...

    Java并发编程原理与实战

    线程的状态以及各状态之间的转换详解.mp4 线程的初始化,中断以及其源码讲解.mp4 多种创建线程的方式案例演示(一)带返回值的方式.mp4 多种创建线程的方式案例演示(二)使用线程池.mp4 ...实战:问题定位.mp4

    java并发变成实战

    《Java并发编程实战》这本书是Java开发者深入理解并发编程的重要参考资料。并发编程是现代软件开发中的核心技能之一,尤其是在多核处理器和分布式系统环境中,它的重要性不言而喻。本书详细探讨了Java平台上的并发...

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

    此外,Phaser、CyclicBarrier和CountDownLatch等同步辅助类也是线程间协调的重要工具。 线程池是Java并发编程中不可或缺的一部分。Executor框架提供了ThreadPoolExecutor,它允许我们预先创建一定数量的线程,管理...

    《亿级流量Jαva高并发与网络编程实战》-源码.zip

    3. **并发工具类**:`CountDownLatch`、`CyclicBarrier`、`Semaphore`和`Future`等工具类用于协调多个线程间的交互和同步。 4. **原子类**:`AtomicInteger`、`AtomicLong`等原子类提供了无锁编程的支持,保证了...

    疯狂Java实战演义【书+源码】(疯狂Java讲义课后习题项目)

    Java提供了强大的线程支持,如synchronized关键字、wait/notify机制、ThreadLocal等,以及并发工具类如Semaphore、CountDownLatch等。源码分析可以帮助读者理解和运用这些机制,编写出高效、安全的并发程序。 文件I...

    从 0 开始带你成为JVM实战高手【完整版】

    - 并发工具类使用:CountDownLatch、CyclicBarrier等。 #### 四、高级进阶篇 1. **JIT编译器原理** - JIT(Just-In-Time Compiler)编译器的作用。 - 代码热点探测技术介绍。 - HotSpot VM的编译优化技术:...

    多线程编程实战指南-核心篇

    Java提供了多种同步机制,如synchronized关键字、wait()和notify()方法、ReentrantLock可重入锁、Semaphore信号量、CountDownLatch倒计时器、CyclicBarrier回环栅栏、Phaser屏障等。这些工具用于避免竞态条件、死锁...

    龙果 java并发编程原理实战

    龙果 java并发编程原理实战 第2节理解多线程与并发的之间的联系与区别 [免费观看] 00:11:59分钟 | 第3节解析多线程与多进程的联系以及上下文切换所导致资源浪费问题 [免费观看] 00:13:03分钟 | 第4节学习并发的四...

    汪文君高并发编程实战视频资源下载.txt

    │ 高并发编程第一阶段17讲、Thread API综合实战,编写ThreadService实现暴力结束线程的综合实战.mp4 │ 高并发编程第一阶段18讲、数据同步的引入与Synchronized的简单介绍.mp4 │ 高并发编程第一阶段19讲、结合...

    《Java7并发编程实战手册》书中实例代码

    《Java 7并发编程实战手册》是一本深入探讨Java并发编程的权威著作,它涵盖了大量实用的技巧和最佳实践,旨在帮助开发者在多线程环境下编写高效、安全的代码。这本书的实例代码提供了丰富的示例,使读者能够直观地...

    实战Concurrent

    "实战Concurrent"这一主题主要聚焦于Java中的并发编程,它涉及到多线程、并发容器、同步机制以及性能优化等多个方面。通过深入理解并实践这些概念,开发者可以更好地设计和实现能够充分利用现代多核处理器能力的应用...

Global site tag (gtag.js) - Google Analytics