- 浏览: 258482 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (88)
- JAVA / base (26)
- JAVA / web (12)
- JAVA / Lib-tools (5)
- SERVER / tomcat (4)
- DB / mysql (4)
- DB / mongodb (2)
- DB / memcached (2)
- DB / redis (2)
- WEB / Front-end (3)
- WEB / security (4)
- WEB / css (2)
- WEB / js (4)
- OS / linux (3)
- IT / Architecture (4)
- IT / other (2)
- Android (9)
- Go (1)
- Other (1)
- OS / Mac (2)
最新评论
-
Zero2Max:
哈哈,马士兵老师也发现了。
java实现接口的bug -
xly1981:
能像CSRF攻击一样带个图就更棒了
XSS跨站攻击 -
xmong:
df274119386 写道在javascript中看到下面的 ...
CSRF攻击与防御策略 -
df274119386:
在javascript中看到下面的语句 e.value = t ...
CSRF攻击与防御策略 -
xmong:
yzxqml 写道xmong 写道yzxqml 写道tomca ...
Tomcat集群
Java多线程实现订单模式:
客户端线程向服务端发起请求后,请求处理需要较长时间处理,这个时候客户端又需要及时得到一个结果响应,这好比我们去蛋糕店订蛋糕,蛋糕往往需要几个小时才能完成,这个时候店员就会给我一个订单,说过几个小时回来取蛋糕。
摸拟场景,客户端线程向服务端发起请求获取数据内容,数据准备需要很长时间,这个时候我们可以及时返回一个虚拟数据结果,服务器端启动新线程准备数据,一段时间后客户端线程在根据虚拟数据结果来获取真实数据内容。
设计如下:
Main:程序main类,负责发起客户端请求。
Server:服务端类,负责接收请求,创建新线程处理请求。
Data:数据接口,提供获取数据内容接口。
VistualData:虚拟数据类,实现data接口,服务端快速响应的虚拟数据结果,可以获取真实数据内容。
RealData:真实数据类,实现data接口,提供处理数据内容和存储真实数据内容。
时序图如下:
实现如下:
Main:main类发出请求
Server:服务类,处理请求
Data:data接口
VirtualData:虚拟数据类
RealData:真实数据类
执行结果如下:
客户端线程向服务端发起请求后,请求处理需要较长时间处理,这个时候客户端又需要及时得到一个结果响应,这好比我们去蛋糕店订蛋糕,蛋糕往往需要几个小时才能完成,这个时候店员就会给我一个订单,说过几个小时回来取蛋糕。
摸拟场景,客户端线程向服务端发起请求获取数据内容,数据准备需要很长时间,这个时候我们可以及时返回一个虚拟数据结果,服务器端启动新线程准备数据,一段时间后客户端线程在根据虚拟数据结果来获取真实数据内容。
设计如下:
Main:程序main类,负责发起客户端请求。
Server:服务端类,负责接收请求,创建新线程处理请求。
Data:数据接口,提供获取数据内容接口。
VistualData:虚拟数据类,实现data接口,服务端快速响应的虚拟数据结果,可以获取真实数据内容。
RealData:真实数据类,实现data接口,提供处理数据内容和存储真实数据内容。
时序图如下:
实现如下:
Main:main类发出请求
package com.thread.order; /** * main类,想服务发出请求,获取请求数据 * @author Administrator * */ public class Main { /** * main方法 * @param args */ public static void main(String[] args) { System.out.println("main start..."); //创建服务 Server server = new Server(); //调用三个数据服务请求 Data data1 = server.getData('a', 2); Data data2 = server.getData('b', 3); Data data3 = server.getData('c', 4); //main线程休息2秒 try { Thread.sleep(2000); } catch (Exception e) { } //输出数据内容 System.out.println("data1="+data1.getContent()); System.out.println("data2="+data2.getContent()); System.out.println("data3="+data3.getContent()); System.out.println("main end..."); } }
Server:服务类,处理请求
package com.thread.order; /** * 服务类,处理服务请求 * @author Administrator * */ public class Server { /** * 返回虚拟数据结果,启动线程处理数据内容。 * @param c * @param count * @return */ public Data getData(final char c, final int count){ final VirtualData vdata = new VirtualData(); System.out.println("start getData:"+c); //启动新线程处理数据 new Thread(){ public void run(){ System.out.println(Thread.currentThread().getName()+".start."+c); RealData rdata = new RealData(); rdata.setContent(c, count);//设置真实数据内容 vdata.setRealData(rdata);//设置真实数据与虚拟数据关联 System.out.println(Thread.currentThread().getName()+".end."+c); } }.start(); System.out.println("end getData:"+c); return vdata; } }
Data:data接口
package com.thread.order; /** * 数据服务接口 * @author Administrator * */ public interface Data { /** * 数据内容接口 * @return */ public String getContent(); }
VirtualData:虚拟数据类
package com.thread.order; /** * 虚拟数据类 * @author Administrator * */ public class VirtualData implements Data{ //真实数据 private RealData realData; //数据准备标准,true表示数据准备完成,false表示数据尚未准备完成 private boolean ready = false; /** * 设置真实数据 * 判断虚拟数据是否已经设置真实数据 * 如果没有真实数据则执行真实数据设置 * 如果有真实数据,则推出设置 * @param rdata */ public synchronized void setRealData(RealData rdata){ if(ready){ return; } System.out.println(Thread.currentThread().getName()+" set RealData"); this.realData = rdata; this.ready = true; notifyAll(); } /** * 获取数据内容 * 判断真实数据是否设置, * 如果设置则返回真实数据内容 * 如果没有设置则线程等待其他线程设置数据 */ @Override public synchronized String getContent() { while (!ready){ try { System.out.println(Thread.currentThread().getName()+"{wait}"); wait(); } catch (InterruptedException e) { e.printStackTrace(); } } return realData.getContent(); } }
RealData:真实数据类
package com.thread.order; import java.util.Random; /** * 真实数据类 * @author Administrator * */ public class RealData implements Data{ //数据内容 private String content; private Random random = new Random(); /** * 设置数据内容 * @param c * @param count */ public void setContent(char c, int count){ char[] buffer = new char[count]; for (int i = 0; i < count; i++) { buffer[i] = c; try { Thread.sleep(random.nextInt(1000));//随机休息 } catch (InterruptedException e) { e.printStackTrace(); } } content = new String(buffer); } /** * 获取数据内容 */ @Override public String getContent() { return content; } }
执行结果如下:
main start... start getData:a end getData:a start getData:b Thread-0.start.a end getData:b start getData:c end getData:c Thread-1.start.b Thread-2.start.c Thread-0 set RealData Thread-0.end.a Thread-1 set RealData Thread-1.end.b data1=aa data2=bbb mian {wait} Thread-2 set RealData Thread-2.end.c data3=cccc main end...
发表评论
-
Java validation(java验证器实现)
2014-03-18 11:45 3627Java validation 1. java验证器 在 ... -
Memo class备注类信息
2014-03-18 09:52 805Memo Class 1. 什么是Memo Class Mem ... -
java annotation注解
2014-01-24 18:01 9021. Annotation的声明方式 An ... -
Java RMI
2013-03-28 15:12 1640Java Rmi 目录 1 JAVA RMI 1 ... -
java内部类
2013-03-19 16:25 992Java内部类 目录 1 JAVA ... -
java多线程设计模式之线程池处理请求
2013-03-08 17:50 1780Java实现线程池处理请求: 客户端线程发出请求,请求存入请 ... -
java多线程设计模式之异步处理请求
2013-03-08 12:36 4479Java实现多线程异步处理请求: Java实现多线程异步处理 ... -
java多线程设计模式之读写文件模式
2013-03-07 17:56 1542Java实现多线程读写数据 ... -
java多线程设计模式之生产者与消费者
2013-03-07 11:34 994Java实现多线程生产者与消费者: 生产者线程负责生产产品 ... -
java多线程设计模式之文件保存
2013-03-06 16:16 1545Java实现多线程保存文件:两线程去保存文件,一个保存线程定时 ... -
java多线程设计模式之队列通信
2013-03-06 13:51 2430Java实现多线程处理队列请求通信:客户端线程向请求队列中不断 ... -
Java读linux系统文件文件名乱码
2012-12-06 17:01 90521,问题描述 web应用想通过Java读取linux系统文件显 ... -
Java安全加密
2012-11-28 10:24 1914安全加密 目录 1 加密安全 1 1.1 应用的安全 1 ... -
图着色问题
2012-11-27 13:05 3056图着色问题 目录 1 图 ... -
JDK6新特性
2012-07-03 23:24 2858JDK6的新特性 JDK6的新特性之一_Desktop类 ... -
JDK7新特性
2012-07-03 15:39 3467JDK7新特性 一 JDK7新特性简介 准备 JDK7下载 ... -
JDK5新特性
2012-07-03 10:23 73JDK5.0新特性 1.自动封箱和自动解封(简单类型和封装类 ... -
java多线程
2012-06-15 15:12 1508Java多线程 目录 1 线 ... -
代理模式
2012-06-13 14:12 1310代理模式 目录 1 代理 ... -
java垃圾回收机制
2012-06-11 11:30 2525Java内存回收 目录 1 JAVA内存STACK和HE ...
相关推荐
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
- 后端: 采用Java语言,遵循MVC设计模式,实现业务逻辑 - 数据库: 使用MySQL或其他数据库存储电影、影厅、座位以及订单信息 2. 主要功能模块 - 影片管理: 管理员可以添加、修改、删除影片信息,如电影名称、上映...
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
Message-Driven Bean EJB实例源代码 2个目标文件 摘要:Java源码,初学实例,EJB实例 Message-Driven Bean EJB实例源代码,演示一个接收购物订单的消息驱动Bean,处理这个订单同时通过e-mail的形式 //给客户发一个感谢...
8.3 面向对象的设计模式 241 实例156 Singleton单例模式 242 实例157 招聘(简单工厂模式) 243 实例158 同学聚会(工厂方法模式) 244 实例159 图书展(抽象工厂模式) 246 实例160 汽车...
8.3 面向对象的设计模式 241 实例156 Singleton单例模式 242 实例157 招聘(简单工厂模式) 243 实例158 同学聚会(工厂方法模式) 244 实例159 图书展(抽象工厂模式) 246 实例160 汽车适配器(Adapter适配器模式...
8.3 面向对象的设计模式 241 实例156 Singleton单例模式 242 实例157 招聘(简单工厂模式) 243 实例158 同学聚会(工厂方法模式) 244 实例159 图书展(抽象工厂模式) 246 实例160 汽车适配器...
Message-Driven Bean EJB实例源代码 2个目标文件 摘要:Java源码,初学实例,EJB实例 Message-Driven Bean EJB实例源代码,演示一个接收购物订单的消息驱动Bean,处理这个订单同时通过e-mail的形式 //给客户发一个感谢...
8.3 面向对象的设计模式 241 实例156 Singleton单例模式 242 实例157 招聘(简单工厂模式) 243 实例158 同学聚会(工厂方法模式) 244 实例159 图书展(抽象工厂模式) 246 实例160 汽车适配器(Adapter...
8.3 面向对象的设计模式 241 实例156 Singleton单例模式 242 实例157 招聘(简单工厂模式) 243 实例158 同学聚会(工厂方法模式) 244 实例159 图书展(抽象工厂模式) 246 实例160 汽车适配器(Adapter适配器模式...
多线程实现方式 1.继承Thread类 2.实现Runnable接口,作为参数传递给Thread 3.实现Callable接口,使用FatureTask包装该对象并作为Thread参数 买家要看到自己买的订单, 卖家要看到自己卖的订单, 怎么设计数据库 ...
在性能优化方面,源码考虑到了查询效率和数据处理速度,使用了缓存机制和多线程技术以应对高并发场景。综上所述,这个源码文件包不仅适合作为毕业设计或课程设计的课题,更是一个学习和实践现代Web开发技术的宝
如果使用到了设计模式,建议在类名中体现出具体模式。例如代理模式的类命名:LoginProxy;观察者模式命名:ResourceObserver。 多选 20.关于数据库模糊检索的描述,下列哪些说法符合《阿里巴巴Java开发手册》:ABD ...
常用数据结构(List、Dictionary、Array)、多态、常用设计模式、反射、常用.net类库、泛型、IO流、委托事件、正则表达式、XML、反射、GC等。 2、数据库开发及ADO.Net(6天) 核心技术课程 数据库开发基础、...