`
wx1569488408
  • 浏览: 79103 次
文章分类
社区版块
存档分类
最新评论

如何实现Java代码中实现异步操作,利用线程池newScheduledThreadPool

 
阅读更多

在实际开发中,会遇到一种情况,就是需要把数据同步到别渠道,然而同步这个操作又很费时,为了不影响当前功能的页面响应,这个时候可以考虑类似ajax中异步操作的想法,这个时候可以利用java的线程池来实现,代码如下:

public class SyncAppInfoToOtherChannelUtil {
	
	private static Logger logger = LoggerFactory.getLogger(SyncAppInfoToOtherChannelUtil.class);
	
	private static ExecutorService executor = Executors.newScheduledThreadPool(20);
	
	/**
	 * 同步应用数据方法
	 * @param appInfo	待同步应用信息
	 */
	public static void syncAppInfo(SeAppInfoExpand appInfo,SeAppFeeInfo seAppFeeInfo,String url){
		executor.submit(new Runnable() {
			@Override
			public void run() {
				try{
					String channel = appInfo.getChannel();
					if(channel.equals("1")){//WEB端
						WebChannelAppInfo webChannelAppInfo= changeToWebAppInfo(appInfo,seAppFeeInfo);
						Map<String,WebChannelAppInfo> map = new HashMap<String,WebChannelAppInfo>();
						map.put("params", webChannelAppInfo);
						String reqJson = JSONObject.toJSONString(map);//请求json串信息
						logger.info("【WEB端】请求参数:"+reqJson);
						String str = HttpClient.doJSONPostMethod(url, reqJson);
						logger.info("【WEB端】同步应用返回信息:"+str);
					}else if(channel.equals("2")){//PC桌面端
						
					}else if(channel.equals("3")){//手机移动端
						PhoneChannelAppInfo phoneAppInfo = changeToPhoneAppInfo(appInfo);
						String reqJson = JSONObject.toJSONString(phoneAppInfo);//请求json串信息
						logger.info("【手机移动端】请求参数:"+reqJson);
						String str = HttpClient.doJSONPostMethod(url, reqJson);
						logger.info("【手机移动端】同步应用返回信息:"+str);
					}else if(channel.equals("4")){//电子书包端
						FlatChannelAppInfo flatChannelAppInfo= changeToFlatAppInfo(appInfo);
						String reqJson = JSONObject.toJSONString(flatChannelAppInfo);//请求json串信息
						logger.info("【电子书包端】请求参数:"+reqJson);
						String str = HttpClient.doJSONPostMethod(url, reqJson);
						logger.info("【电子书包端】同步应用返回信息:"+str);
					}else if(channel.equals("5")){//电子班牌端
						ClassChannelAppInfo classAppInfo = changeToClassAppInfo(appInfo);
						String reqJson = JSONObject.toJSONString(classAppInfo);//请求json串信息
						logger.info("【电子班牌端】请求参数:"+reqJson);
						String str = HttpClient.doJSONPostMethod(url, reqJson);
						logger.info("【电子班牌端】同步应用返回信息:"+str);
					}else if(channel.equals("6")){//工作台
						//同步应用到工作台
//						WorkBenchAppInfo  workBenchAppInfo= changeToWorkBenchAppInfo(appInfo);
						String reqJson = JSONObject.toJSONString(appInfo);//请求json串信息
						logger.info("【工作台】请求参数:"+reqJson);
						String str = HttpClient.doJSONPostMethod(url, reqJson);
						logger.info("【工作台】同步应用返回信息:"+str);
					}
				}catch(Exception e){
					logger.info("同步应用信息失败",e);
				}finally{
					
				}
			}
		});
		
		//executor.shutdown();
	}

newScheduledThreadPool的好处,可以无限的往池子中存放任务(Executors.newScheduledThreadPool(20)是用来定义并发数),超过并发数的任务处于等待中,并发任务完成在继续执行等待的任务;

转载于:https://my.oschina.net/u/4051450/blog/3061775

分享到:
评论

相关推荐

    java 四种线程池实例

    在Java中,线程池是通过`java.util.concurrent`包中的`ExecutorService`接口及其实现类来实现的。本文将深入探讨四种常见的Java线程池实例:`ThreadPoolExecutor`、`Executors`提供的固定线程池、单线程池和定时...

    java线程池的源码分析.zip

    本文将深入探讨Java线程池的源码分析,并对比不同类型的线程池,以帮助开发者更好地理解和利用这一强大的工具。 首先,我们要理解Java线程池的核心类`java.util.concurrent.ThreadPoolExecutor`,它是所有自定义...

    Java几种线程池类型介绍及使用.docx

    在Java中,线程池的实现类主要包含以下四种: 1. **`newCachedThreadPool`**: 这种类型的线程池会根据需要创建新线程,并且能够重用已有的线程。如果线程在60秒内没有被使用,那么线程会被终止并从缓存中移除,...

    java线程池的使用方式

    在Java中,`Executor`接口是线程池的顶层接口,但更确切地说它是一个执行线程的工具而非线程池本身。真正代表线程池的是`ExecutorService`接口。为了简化线程池的配置和使用,`Executors`类提供了一系列静态工厂方法...

    Android线程池管理的代码例子

    在Android中,我们可以创建一个ThreadPoolExecutor实例来处理异步任务,如网络请求、数据库操作或者复杂的计算任务。下面是一个基本的创建ThreadPoolExecutor的例子: ```java int corePoolSize = 5; // 核心线程数...

    java并发笔记,包含线程池

    Java并发编程是Java开发中的重要领域,特别是在大型系统和服务器端应用中,高效地利用多核处理器资源,实现高并发性能至关重要。线程池作为Java并发处理的核心工具,它的理解和运用是每个Java开发者必备的技能。 ...

    java实现后台进程

    ExecutorService可以创建线程池,提高多线程环境下的性能和资源利用率。Future接口用于获取异步计算的结果: ```java ExecutorService executor = Executors.newFixedThreadPool(1); Future&lt;?&gt; future = executor....

    java内置线程池 !!!

    ### Java内置线程池详解 #### 一、线程池基本概念 在深入探讨Java内置线程池之前,我们首先需要了解线程池的基本概念及其重要性。 **线程池**是一种多线程处理形式,它通过重用预创建的线程来执行任务,而不是为...

    Java四种线程池的简单介绍.docx

    本文介绍了 Java 中的四种线程池模型:`newCachedThreadPool`、`newFixedThreadPool`、`newScheduledThreadPool` 和 `newSingleThreadExecutor`。通过这些线程池的合理使用,可以在不同的应用场景下有效提升程序的...

    详谈Java几种线程池类型介绍及使用方法

    Java 中的线程池是一种高效的并发编程机制,它可以将任务提交给线程池,并由线程池中的线程执行任务, Java 提供了四种线程池类型,分别是 newCachedThreadPool、newFixedThreadPool、newScheduledThreadPool 和 ...

    Java四种线程池的使用详解

    在上面的示例代码中,我们使用newScheduledThreadPool创建了一个定长线程池,并将其大小设置为3。然后,我们使用schedule方法提交了一个任务,该任务将在2秒后执行。 四、新SingleThreadExecutor ...

    Java线程池的几种实现方法和区别介绍

    Java中线程池的实现主要通过`java.util.concurrent`包中的`ExecutorService`接口及其具体实现类。本文将详细介绍Java线程池的四种常见实现方法:`newFixedThreadPool`、`newCachedThreadPool`、`...

    java 多线程的详细介绍和使用

    本篇文章将深入探讨Java中的多线程以及线程池的使用。 在Java中,多线程主要用于处理并发任务,这包括但不限于网络通信、用户界面更新、计算密集型任务等。Java提供了多种创建和管理线程的方式,例如通过继承`...

    android线程池项目

    在Android中,Java的`ExecutorService`是实现线程池的主要接口,它是`java.util.concurrent`包的一部分。`ExecutorService`提供了创建、管理和控制线程池的能力。通常,我们可以使用`Executors`类提供的静态工厂方法...

    Java ExecutorService四种线程池使用详解

    Java的`java.util.concurrent`包中提供了`ExecutorService`的实现类,特别是通过`Executors`工厂类可以方便地创建四种类型的线程池,分别是`newCachedThreadPool`、`newFixedThreadPool`、`newScheduledThreadPool` ...

    JAVA 基础知识总结(手写)

    在Java并发编程中,`ThreadPoolExecutor`是自定义线程池的核心类,`Executors`提供了一些工厂方法来创建线程池,例如`newFixedThreadPool(int n)`创建固定大小的线程池,`newScheduledThreadPool(int corePoolSize)`...

    Java 并发编程硬核资料.pdf

    线程池则是Java并发编程中用于管理线程生命周期和执行异步任务的一种机制,其优势包括减少线程创建和销毁的开销,以及有效地利用系统资源。锁的机制则主要涉及到不同类型的锁(如读写锁、可重入锁等)的使用和场景,...

    Java并发之线程池Executor框架的深入理解

    Java中的线程池Executor框架是Java并发编程中的一种常见机制,用于管理和执行异步任务。通过使用线程池,可以大大减少线程的创建和销毁开销,从而提高系统的性能和稳定性。 Executor框架是Java中的一个核心框架,...

    JAVA多线程并发编程

    线程池是Java并发编程中的重要概念,它有效地管理和控制线程的创建和销毁,提高了系统资源的利用率。Java中,可以通过`Executors`类创建不同类型的线程池: 1. **固定大小线程池**:`newFixedThreadPool(int ...

    Java四种常用线程池的详细介绍

    Java四种常用线程池的详细介绍 线程池的概念:线程池是指首先创建一些线程,它们的集合称为线程池。使用线程池可以很好地提高性能,线程池在系统启动时即创建大量空闲的线程,程序将一个任务传给线程池,线程池就会...

Global site tag (gtag.js) - Google Analytics