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

java多线程设计模式之异步处理请求

阅读更多
Java实现多线程异步处理请求:

Java实现多线程异步处理请求,即一个服务请求启动一个新线程处理请求,每个服务请求异步处理。
设计如下:
Main:程序入口,发起多个服务请求。
Server:服务请求类,接受请求,启动线程处理服务请求。
Handle:处理请求类,线程调用处理类的处理方法来处理请求。

实现如下:

Main:main类,发起多个服务请求。
package com.thread.handle;

/**
 * main类
 * @author Administrator
 *
 */
public class Main {

	
	public static void main(String[] args) {
		
		System.out.println("main start");
		//发出多个服务请求处理
		Server server = new Server();
		server.doRequest("CCCCCCCCC");
		server.doRequest("AAAAAAA");
		server.doRequest("BBBBBBBBB");
		server.doRequest("DDDDDDDD");
		
		System.out.println("main end");
	}
	
}

Server:服务请求类,创建线程处理请求。
package com.thread.handle;


/**
 * 服务请求类
 * 服务接受到一个请求后启动一个新的线程来处理请求
 * @author Administrator
 *
 */
public class Server {

	/**
	 * 处理类
	 */
	Handle handle = new Handle();
	
	public void doRequest(final String str){
		/**
		 * 启动新线程来处理请求
		 */
		new Thread(){
			public void run(){
				//调用处理类来处理请求
				handle.doHandle(str);
			}
		}.start();
		
	}
	
}

Handle:处理请求类

package com.thread.handle;

import java.util.Random;

/**
 * 请求处理类
 * @author Administrator
 *
 */
public class Handle {

	Random random = new Random();
	
	/**
	 * 处理请求
	 * @param str
	 */
	public void doHandle(String str){
		System.out.println("doHandle start:"+str);
		//循环输出字符串的字符
		for (int i = 0; i < str.length(); i++) {
			doSleep();//随机休息
			System.out.print(str.charAt(i));
		}
		System.out.println();
		System.out.println("dHandle end:"+str);
	}
	
	/**
	 * 线程随机休息
	 */
	public void doSleep(){
		try {
			Thread.sleep(random.nextInt(500));
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	};
	
}


执行结果:
main start
doHandle start:CCCCCCCCC
doHandle start:AAAAAAA
main end
doHandle start:DDDDDDDD
doHandle start:BBBBBBBBB
CDDBAABCDABCADBDACDBAA
dHandle end:AAAAAAA
DD
dHandle end:DDDDDDDD
CBBCBCB
dHandle end:BBBBBBBBB
CC
dHandle end:CCCCCCCCC




分享到:
评论

相关推荐

    JAVA上百实例源码以及开源项目

     当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。  QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...

    JAVA上百实例源码以及开源项目源代码

     当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。  QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...

    Java并发编程(学习笔记).xmind

    (1)如果设计正确,多线程程序可以通过提高处理器资源的利用率来提升系统吞吐率 (2)建模简单:通过使用线程可以讲复杂并且异步的工作流进一步分解成一组简单并且同步的工作流,每个工作流在一个单独的线程...

    java 面试题 总结

    与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...

    java面试题

    答:Servlet与CGI的区别在于Servlet处于服务器进程中,它通过多线程方式允许其service方法,一个实例可以服务于多个请求,并且其实例一般不会被销毁,而CGI对每个请求都产生新的进程,服务完后就销毁,所以效率上...

    java面试宝典

    70、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 17 71、启动一个线程是用run()还是start()? 17 72、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 18 73...

    Java面试宝典-经典

    50、多线程有几种实现方法?同步有几种实现方法? 33 51、启动一个线程是用run()还是start()? . 33 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念...

    Java面试宝典2010版

    50、多线程有几种实现方法?同步有几种实现方法? 33 51、启动一个线程是用run()还是start()? . 33 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念...

    asp.net多线程的TCP端口扫描程序的设计与实现(源代码+thesis).zip

    异步编程:我们将使用ASP.NET提供的异步编程模型来处理并发请求和长时间运行的任务。这将提高应用程序的并发能力和响应性能,确保用户在高负载情况下仍然能够流畅地使用应用程序。 性能优化:我们将使用一系列性能...

    超级有影响力霸气的Java面试题大全文档

    与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...

    java面试题大全(2012版)

    50、多线程有几种实现方法?同步有几种实现方法? 33 51、启动一个线程是用run()还是start()? . 33 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念...

    最新Java面试宝典pdf版

    50、多线程有几种实现方法?同步有几种实现方法? 33 51、启动一个线程是用run()还是start()? . 33 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念...

    Java面试笔试资料大全

    50、多线程有几种实现方法?同步有几种实现方法? 33 51、启动一个线程是用run()还是start()? . 33 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念...

    java面试宝典2012

    50、多线程有几种实现方法?同步有几种实现方法? 36 51、启动一个线程是用run()还是start()? . 37 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 37 53、线程的基本概念...

    JAVA面试宝典2010

    50、多线程有几种实现方法?同步有几种实现方法? 33 51、启动一个线程是用run()还是start()? . 33 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念...

    Java面试宝典2012新版

    50、多线程有几种实现方法?同步有几种实现方法? 33 51、启动一个线程是用run()还是start()? . 33 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念...

Global site tag (gtag.js) - Google Analytics