`

Java并发任务处理例子

    博客分类:
  • J2EE
 
阅读更多

 

public void init() {
		super.init();
		this.ioThreadPool = new ThreadPoolExecutor(50, 50, Long.MAX_VALUE, TimeUnit.SECONDS, new java.util.concurrent.LinkedTransferQueue<Runnable>(), new ThreadFactory() {
			AtomicLong id = new AtomicLong();

			@Override
			public Thread newThread(final Runnable r) {
				Thread t = new Thread(new Runnable() {

					@Override
					public void run() {
						try {
							r.run();
						} catch (RuntimeException e) {
							logger.error("执行IO异常", e);
							throw e;
						}
					}
				});
				t.setDaemon(true);
				t.setName("FootballService-IO-" + id.getAndIncrement());
				return t;
			}
		});

		 
	}
 

 

 

 

//从fdate到tdate, 结果: 日期  30个区的创建角色总和
	public Map<String, Long> countCreateRole(String fdate, String tdate, final String channel, Map<String, Object> gameConfig) throws Exception {
		// 只读数据不需要处理并发
		final Map<String, String> param = new HashMap<String, String>();
		param.put("fdate", fdate);
		param.put("tdate", tdate);
		param.put("channel", channel);
		final Map<String, Long> date_count = new HashMap<String, Long>();

		final List<String> zones = (List<String>) gameConfig.get("areas");
		Set<String> dateSet = JdbcTool.getDateRangeByDay(fdate, tdate, "yyyy-MM-dd");
		List<Future<Void>> tasks = new ArrayList<>(zones.size());
		for (String date : dateSet) {
			final String _date = date;
			tasks.add(publicThread.submit(new Callable<Void>() {

				@Override
				public Void call() {
					final AtomicLong count = new AtomicLong();
					List<Future<Void>> subTasks = new ArrayList<>(zones.size());
					for (String _zone : zones) {
						final String zone = _zone;
						subTasks.add(ioThreadPool.submit(new Callable<Void>() {
							@Override
							public Void call() throws Exception {
								JdbcTemplate _jdbcTemplate = dataSourceManager.getJdbcTemplate(zone);
								String database = dataSourceManager.getDatabase(zone);
								String _count = mget(CacheConstant.RZRoleCreateCount, zone + "#" + _date + "#" + channel + "#");
								if (_count == null) {
									StringBuilder sb = new StringBuilder();
									sb.append("SELECT count(roleId) as count  ");
									sb.append("from  " + database + "_log.role ");
									sb.append("WHERE DATE(createTime)='" + _date + "' ");
									if (param.get("channel") != null) {
										sb.append(" AND channelId = '" + channel + "' ");
									}
									long queryForLong = _jdbcTemplate.queryForLong(sb.toString());
									count.addAndGet(queryForLong);
									mput(CacheConstant.RZRoleCreateCount, zone + "#" + _date + "#" + channel + "#", queryForLong + "");
								} else {
									count.addAndGet(Long.valueOf(_count));
								}
								return null;
							}
						}));
					}
					for (Future<Void> task : subTasks) {
						try {
							task.get();
						} catch (Exception e) {
							throw new RuntimeException(e);
						}
					}
					synchronized (date_count) {
						date_count.put(_date, count.get());
					}
					return null;
				}

			}));
		}
		for (Future<Void> task : tasks) {
			task.get();
		}
		return date_count;
	}
 

 

@PreDestroy
	public void destroy() {
		this.ioThreadPool.shutdownNow();

	}

 

 

分享到:
评论

相关推荐

    Java 并发编程实战.pdf

    - **最佳实践**:结合具体案例分享Java并发编程的最佳实践,涵盖设计模式的应用、常见陷阱规避等方面。 ### 实战案例 - **多线程下载**:利用多线程技术实现文件的分块下载与合并,展示并发技术在提高下载速度方面...

    Java并发编程实践高清pdf及源码

    在Java并发编程中,"并发"是指在单个程序中同时执行多个任务,这通常通过多线程实现。Java平台提供了丰富的API来支持并发,如`Thread`类、`ExecutorService`接口和`Future`接口等。这些工具允许开发者设计出能够充分...

    Java并发实战

    《Java并发实战》是深入探讨Java编程中并发处理的一本技术书籍。在现代软件开发中,多线程和并发控制是提升程序性能的关键技术,尤其是在服务器端开发中尤为重要。Java作为一门成熟的编程语言,其在并发控制方面提供...

    java并发编程实践pdf笔记

    Java并发编程实践是Java开发中不可或缺的一个领域,它涉及到如何高效、正确地处理多线程环境中的任务。这本书的读书笔记涵盖了多个关键知识点,旨在帮助读者深入理解Java并发编程的核心概念。 1. **线程和进程的...

    java多线程并发编程例子

    Java多线程并发编程是Java开发中的重要领域,特别是在服务器端和高并发应用中不可或缺。`java.util.concurrent`包提供了丰富的工具类,帮助开发者更好地管理线程和优化并发性能。以下将详细介绍标题和描述中涉及的...

    Java并发编程书籍高清版

    其次,《java并发编程的艺术》是一本针对Java程序员的实用指南,它可能更注重实践和案例,旨在帮助读者在实际项目中更好地应用并发技术。书中可能包含了大量示例代码,通过实例解析Java并发编程中的常见问题,如死锁...

    Java并发编程从入门到精通(pdf)(附源码)

    总的来说,《Java并发编程从入门到精通》不仅覆盖了Java并发编程的全面知识,还提供了丰富的实践案例和源码,是Java开发者提升并发编程能力的理想教材。通过深入学习这本书,你将能够掌握并发编程的核心技巧,为成为...

    java定时任务小例子

    `Timer`和`TimerTask`是Java基础库提供的简单定时解决方案,但它们并不适合复杂的定时需求,比如并发任务管理、精确的时间控制等。对于这些高级需求,开发者通常会使用Quartz、Spring的`@Scheduled`注解或其他第三方...

    java并发编程

    Java并发编程是Java开发者必须掌握的关键技能之一,它涉及到如何在多线程环境中高效、安全地执行程序。并发编程能够充分利用多核处理器的计算能力,提高应用程序的响应速度和整体性能。《Java编程并发实战》这本书是...

    Java实现的并发任务处理实例

    总结来说,这个Java并发任务处理实例展示了以下关键点: 1. 使用`ThreadPoolExecutor`创建线程池,自定义线程池参数以优化性能。 2. 分解任务并使用`ForkJoinPool`和`LinkedTransferQueue`实现并行处理。 3. 使用`...

    Java并发编程代码(包含运行依赖库)

    这个压缩包中的“Java CIP”可能包含了Java并发编程的经典案例和实践,例如生产者消费者模型、线程池的使用、并发集合的应用等。通过这些实例,你可以深入理解并发编程的原理,并学习如何在实际项目中应用这些知识,...

    [Java并发编程实践].(Java.Concurrency.in.Practice).Brian.Goetz.英文原版.pdf

    - **Executor框架**:Executor框架提供了一种管理线程池的方法,可以有效地控制并发任务的数量,避免资源过度消耗。书中介绍了如何使用`ExecutorService`等接口和类。 - **并发集合**:Java提供了多种并发集合类,如...

    实战Java高并发程序设计(高清版)

    5. **J.U.C框架**:Java并发 utilities (J.U.C) 框架是Java并发编程的重要组成部分,书中会介绍如何利用这个框架来提升并发性能和代码的可读性。 6. **性能调优**:在高并发场景下,性能优化是必不可少的。可能涵盖...

    JAVA并发编程实战.pdf

    根据提供的文件信息:“JAVA并发编程实战.pdf”,我们可以深入探讨与Java并发编程相关的多个核心知识点。 ### Java并发编程基础 #### 1. 并发与并行 - **并发(Concurrency)**:指一个程序中存在多个执行序列(如...

    java定时任务开源案例

    然而,`Timer`并不适合并发环境,因为它只有一个线程处理所有任务,可能导致任务间的相互阻塞。 - `java.util.concurrent.ScheduledExecutorService`: 这是Java并发包中的一个接口,通过实现该接口的类(如`...

    java 并发学习总结

    Java并发编程是Java开发中的重要领域,涉及到多线程、线程安全以及系统性能优化等多个方面。本学习总结将深入探讨并发容器、同步容器、同步工具、死锁、异常处理、线程中断、线程池、返回结果以及同步方法等核心概念...

    Java并发编程的艺术

    ### Java并发编程的艺术 #### 一、并发编程的挑战与应对策略 本书开篇即指出,随着现代计算机系统越来越依赖于多核处理器的并行计算能力,Java开发人员面临着前所未有的并发编程挑战。这些挑战包括但不限于数据...

    java并发编程源码

    《Java并发编程源码》是深入理解Java多线程编程技术的重要参考资料,它包含了实际案例和源代码,有助于开发者在实践中提升并发编程能力。这里主要围绕"并发"和"源码"这两个关键标签,详细讲解Java并发编程的核心知识...

    java并发编程实践(第一版)

    总结而言,《Java并发编程实践》作为一本关于Java并发编程的经典书籍,通过理论讲解和实践案例相结合的方式,全面地向读者介绍了如何在Java中实现高效的并发程序设计,为开发者提供了丰富的工具和策略来处理多线程...

Global site tag (gtag.js) - Google Analytics