`
san586
  • 浏览: 135249 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

WEB框架中异步实现方案

阅读更多
异步解决方案中除了JMS,AJAX,DWR等外的简单选择,就是多线程(具体的就是这个包:java.util.concurrent)
为实现在WEB中需要执行一些耗时的操作,例如发发邮件之类,但是又不能影响前台页面的响应这种需求,多线程中列举2个程序来解决。分别是立即执行和计划任务式的执行,2种执行都是在主线程外另外建个线程,故不影响主线程。
package Executor;

import java.util.Date;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/*
 * MVC中的异步执行解决方案
 * @Author 三上
 */
public class SingleThreadExecutor {
	public static void main(String[] args) {
		try {
			// 创建一个单线程执行程序
			ExecutorService executorService = Executors
					.newSingleThreadExecutor();
			final Runnable beeper = new Runnable() {
				int count = 0;

				public void run() {
					System.out.println(new Date() + " beep " + (++count));
				}
			};
			for (int i = 0; i < 100; i++) {
				executorService.execute(beeper);
			}
			executorService.shutdown();
			System.out.println("我是主线程,先执行我");
		} catch (Exception e) {
		}
	}
}

package concurrent;

import static java.util.concurrent.TimeUnit.SECONDS;
import java.util.Date;
import java.util.concurrent.Callable;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
/*
 * ScheduledExecutorService 	一个 ExecutorService,可安排在给定的延迟后运行或定期执行的命令。
 * 要安排在某个以后的 Date 运行,可以使用:schedule(task, date.getTime() - System.currentTimeMillis(), TimeUnit.MILLISECONDS)。
 * 参考网址:http://www.kuqin.com/J2SE6-API/java/util/concurrent/ScheduledExecutorService.html
 */
public class TestScheduledThread {
	public static void job() {
		final ScheduledExecutorService scheduler = Executors
			 	.newScheduledThreadPool(2);
		final Runnable beeper = new Runnable() {
			int count = 0;
			public void run() {
				System.out.println(new Date() + " beep " + (++count));
			}
		};
		//Callable与Runnable得区别是,它有返回值
		Callable callable=new Callable(){
			int count = 0;
			public Object call() {
				System.out.println(new Date() + " callbeep " + (++count));
				return count;
			}
		};
		//1秒钟后运行,只执行1次
		final ScheduledFuture beeperHandle3 = scheduler.schedule(callable, 1, SECONDS);
		final ScheduledFuture beeperHandle4 = scheduler.schedule(beeper, 1, SECONDS);
		// 1秒钟后运行,并每隔2秒运行一次
		final ScheduledFuture beeperHandle = scheduler.scheduleAtFixedRate(
				beeper, 1, 2, SECONDS);
		// 2秒钟后运行,并每次在上次任务运行完后等待5秒后重新运行
		final ScheduledFuture beeperHandle2 = scheduler.scheduleWithFixedDelay(
				beeper, 2, 5, SECONDS);
		// 30秒后结束关闭任务,并且关闭Scheduler
		scheduler.schedule(new Runnable() {
			public void run() {
				beeperHandle.cancel(true);
				beeperHandle2.cancel(true);
				beeperHandle3.cancel(true);
				beeperHandle4.cancel(true);
				scheduler.shutdown();
			}
		}, 30, SECONDS);
	}

	public static void main(String[] args) {
		job();
		System.out.println("我这个执行完了,但是后面还有");
	}
}

如果要求发完邮件后,能在前台显示“已发送完成”,那么就用下面这个:
package concurrent;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class TestFutureTask {
	public static void main(String[] args) throws InterruptedException,
			ExecutionException, TimeoutException {
		final ExecutorService exec = Executors.newFixedThreadPool(5);
		Callable call = new Callable() {
			public String call() throws Exception {
				Thread.sleep(1000 * 5);
				return "Other less important but longtime things.";
			}
		};
		Future task = exec.submit(call);
		// 重要的事情
		Thread.sleep(1000 * 3);
		System.out.println("Let’s do important things.");
		// 其他不重要的事情(比如发邮件等),30秒内如果不执行完,就返回null
		Object obj = task.get(30,TimeUnit.SECONDS);
		System.out.println(obj);
		// 关闭线程池
		exec.shutdown();
	}
}
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Python-一个现代快速简单的异步python3web框架

    在Web框架中,如使用了异步功能,开发人员可以编写非阻塞的代码,使得I/O密集型任务(如网络请求或数据库查询)可以在等待响应的同时执行其他任务,显著提升了整体效率。 这个框架可能是类似Tornado、Sanic或者...

    全异步SwooleAPI开发框架内置Promise异步MySQL连接池内存缓存管理异步Task方案等

    全异步Swoole API开发框架是现代PHP开发中一种高效、高性能的选择,它结合了Promise、异步MySQL连接池、内存缓存管理和异步Task处理等关键特性,旨在为Web应用提供强大的并发处理能力。以下是对这些核心知识点的详细...

    Python-SanicDB是为Python的异步Web框架Sanic方便操作MySQL而开发的工具

    SanicDB是一个专门为Python的异步Web框架Sanic设计的数据库操作工具,旨在简化与MySQL数据库的交互。在异步编程环境中,效率至关重要,而SanicDB通过利用aiomysql.Pool,提供了一种轻量级的解决方案,以满足快速、非...

    基于SSH jQuery框架的餐饮Web App的设计与实现.pdf

    在基于SSH + jQuery框架的餐饮Web App设计与实现中,首先,开发环境选择Windows操作系统,利用Eclipse作为开发工具,这为开发者提供了一个集成化的开发环境,便于代码编写、调试和项目管理。数据库方面,选用Oracle...

    java web 框架开发

    首先,Java Web框架的核心目标是解决MVC(Model-View-Controller)模式中的问题。MVC是一种设计模式,用于分离业务逻辑、数据模型和用户界面,使得开发和维护更为简单。框架如Spring MVC、Struts 2和JSF(JavaServer...

    cpp-RestbedC11异步RESTful框架

    这个框架由 Corvusoft 公司开发,旨在提供轻量级、高性能且易于使用的解决方案,帮助开发者快速实现 REST API。在 C++ 开发领域,Restbed 凭借其现代化的设计和对异步编程的支持,成为了一个颇具吸引力的选择。 ...

    Python-msgsender是一个基于tornado框架实现的异步消息发送接口

    Python-msgsender是一个强大的工具,它基于著名的Tornado Web框架构建,设计用于实现异步消息发送功能。Tornado是一个开源的Python web框架和异步网络库,最初由FriendFeed开发,后来被Facebook收购并开源。其核心...

    基于swoole实现的自带httpserver的web开发框架

    使用Swoole构建的Web框架,能够确保这些接口的快速响应和高并发处理能力,从而满足现代互联网应用的需求。 基于Swoole的Web开发框架通常具有以下特点: 1. **异步非阻塞I/O**:Swoole扩展实现了事件驱动和异步编程...

    WEB服务调用框架的设计与实现

    针对上述问题,本系统提出了一种新的Web服务调用框架设计与实现方案。通过对Web服务调用过程中各个环节及其相互关系进行深入分析,利用WSDL4J工具解析用户提供的WSDL文件,从中提取出所有服务操作及所使用数据类型的...

    cpp-oat一个纯C实现零依赖面向性能的Web服务开发框架

    `oatpp`作为C++的框架,它旨在解决传统C++库在Web服务开发中的复杂性问题,提供一种现代且轻量级的解决方案。 **核心特性:** 1. **纯C++实现**:`oatpp`完全用C++编写,支持C++11及更高版本,这使得它可以充分利用...

    DWR集合Spring实现异步提交

    **DWR(Direct Web Remoting)集合Spring实现异步提交** DWR(Direct Web Remoting)是一种开源JavaScript库,它允许Web应用程序在客户端与服务器之间进行实时、双向通信,从而实现异步数据交换。结合Spring框架,...

    基于DWR框架的Web推送技术实现

    在本项目"基于DWR框架的Web推送技术实现"中,我们将探讨如何利用DWR框架来构建一个实时的Web聊天程序。 首先,理解DWR框架的核心概念是至关重要的。DWR允许开发者在浏览器中直接调用服务器上的Java方法,就像它们是...

    Web开发框架

    在众多的Web开发框架中,PHP Web框架以其开源、易学、高效的特点备受青睐。本文将深入探讨PHP Web框架以及以“Laravel”为例的具体应用。 PHP Web框架的核心理念在于提供一套标准和规则,帮助开发者快速地搭建Web...

    ssm框架实现模糊查询

    在SSM框架中实现模糊查询,主要涉及到以下几个关键知识点: 1. **Spring框架**:Spring作为基础框架,负责管理整个应用的bean,包括数据库操作类(如MyBatis的SqlSessionTemplate或Mapper接口)和业务逻辑层...

    EF+MVC+增删改查+webapi+异步上传文件+类库大全

    标题中的“EF+MVC+增删改查+webapi+异步上传文件+类库大全”涵盖了多个关键的IT技术领域,以下是这些技术的详细解释: 1. Entity Framework (EF):这是一个由Microsoft开发的对象关系映射(ORM)框架,用于.NET应用...

    开源WEB框架-Portal-Basic使用手册

    开源WEB框架-Portal-Basic使用手册的知识点可以详细阐述如下: 1. 开源WEB框架-Portal-Basic简介: Portal-Basic是Java Web应用开发框架,它提供了一套完整的高性能Full-Stack Web应用开发解决方案。其特点包括内置...

    android 异步封装调用Webservice

    在Android开发中,调用Web服务是常见的需求,特别是与后端进行数据交互时。"Android异步封装调用Webservice"是指将调用Web服务的过程进行封装,使其能够在后台线程执行,避免阻塞主线程,提升用户体验。C# ...

    LigerUI_Release Web框架

    通过内置的AJAX库,开发者可以轻松实现页面异步更新,从而创建出更流畅、更动态的Web应用。同时,它还提供了数据绑定机制,让开发者可以无缝地将服务器端数据与前端展示结合,简化了前后端的数据交互流程。 对于...

    基于hibernate/dwr框架实现的web项目

    在这个"基于Hibernate/DWR框架实现的Web项目"中,我们可以看到开发者利用了Java Web开发的强大工具,包括Hibernate作为持久层框架,Direct Web Remoting (DWR)作为前端与后端交互的桥梁,以及Oracle数据库作为数据...

    WorkerDOM实现运行在一个WebWorker中的DOMAPI和框架

    WorkerDOM 是一个JavaScript库,它的主要目标是将DOM API和框架功能带入Web Worker环境。在Web Worker中执行DOM操作可以显著...随着Web技术的不断发展,WorkerDOM这样的解决方案将会在未来的Web开发中发挥更大的作用。

Global site tag (gtag.js) - Google Analytics