`
zhaiyuehui
  • 浏览: 11393 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

java异步与多线程

    博客分类:
  • java
阅读更多
异步与多线程,从辩证关系上来看,异步和多线程并不时一个同等关系,异步是目的,多线程只是我们实现异步的一个手段.
什么是异步:异步是当一个调用请求发送给被调用者,而调用者不用等待其结果的返回.实现异步可以采用多线程技术或则交给另外的进程来处理.

在JAVA平台,实现异步调用的角色有如下三个角色:调用者 提货单 真实数据一个调用者在调用耗时操作,不能立即返回数据时,先返回一个提货单.然后在过一断时间后凭提货单来获取真正的数据.去蛋糕店买蛋糕,不需要等蛋糕做出来(假设现做要很长时间),只需要领个提货单就可以了(去干别的事情),等到蛋糕做好了,再拿提货单取蛋糕就可以了。
顾客、蛋糕店、蛋糕师、提货单四个类
顾客:
main{
Host host = new Host();
Data data1 = host.request(10,'A');
Data data2 = host.request(10,'B');

Thread.sleep(200);
System.out.println("完成其他工作");
System.out.println("data1 = " + data1.getContent());//享用蛋糕,这个方法在做好蛋糕之前会阻塞顾客线程。
System.out.println("data2 = " + data2.getContent());
}
蛋糕店:
Host{
request(int count,char c){
//建立提货单的实体
FutureData future = new FutureData();
//为了建立蛋糕的实体,启动新的线程
new Thread() {
public void run() {
RealData realdata = new RealData(count, c);
future.setRealData(realdata);
}}.start
return future;//返回提货单
}
}
蛋糕师:
RealData{
拉蛋糕的耗时操作
成员变量content,存储蛋糕;
}
提货单:
FutureData{
private RealData realdata = null;
private boolean ready = false;
synchronized void setRealData(RealData realdata) {//这里有两个同步方法,避免顾客A与其对应的面包师A同时操作。
if (ready) {return;}//只能设置一次
this.realdata = realdata;
this.ready = true;
}
synchronized String getContent() {//当一个线程访问object的一个synchronized代码块时,其他线程对object中所有其它同步代码块的访问被阻塞。
while(!ready){wait()}//做好之前等
return realdata.getContent();
}
}
原文:http://java.chinaitlab.com/line/839154_2.html
分享到:
评论

相关推荐

    Java多线程实现异步调用实例

    Java多线程实现异步调用实例。运行Main可以看到结果。main是主线程,另有A,B,C三个线程用不同的时间跑完。

    java多线程异步实例

    java线程异步案例,以三个线程作为案例典型,同时发起三个线程,根据不同的订单领取各自的物品,自作过程同步处理。

    java实现多文件异步上传

    java实现多文件异步上传

    Java-多线程异步请求统一响应结果.docx

    Java-多线程异步请求统一响应结果 多线程异步请求是指在多个线程同时发起请求,并且在请求过程中不阻塞主线程的执行。这样可以提高程序的并发能力和响应速度。 需要注意的是,在实际的异步请求中,可能需要使用...

    Java多线程之定时任务 以及 SpringBoot多线程实现定时任务——异步任务

    1. SpringBoot 自定义线程池以及多线程间的异步调用(@Async、@EnableAsync) 2.Java多线程之定时任务 以及 SpringBoot多线程实现定时任务 3.@EnableScheduling 与 @Scheduled

    Java程序框架--多线程异步处理多任务

    本程序提供了一个多任务多线程异步处理框架。该框架使用简单,用户只需要继承抽象类Task,构建自己的任务类,再构造一个任务源,就可以轻松使用这个框架。 程序包里提供了一个例子Mytask 和MyTaskGenerator, 用户只...

    java多线程异步性

    这是用java做的,体现多线程中的异步性的一个小程序。对初学者挺实用的...

    java多线程查询数据库

    java多线程并发查询数据库,使用线程池控制分页,并发查询。

    java多线程实现大批量数据导入源码

    java多线程实现大批量数据切分成指定份数的数据,然后多线程处理入库或者导出,线程的个数和每份数据的数量都可以控制

    C#Winform异步多线程和线程池集成的用法

    本程序详细介绍了线程和线程池的用法,使用多线程进行和异步编程实现数据库操作和日志的记录

    Java多线程Executors批量执行数据实现限流

    Java多线程实现数据切割批量执行,实现限流操作。 java线程池Executors实现数据批量操作。 批量异步Executors处理数据,实现限流操作,QPS限流。 线程池调用第三方接口限流实现逻辑。 案例适合: 1.批量处理大数据。...

    用JAVA写的一个异步多线程批处理的组件

    为了方便以后的开发,写了个异步多线程批处理的组件 具体用法见代码里的说明。很多时候都需要处理大批量数据,以后就方便多了

    Java多线程-Socket编程

    Java 多线程-Socket 编程 Java 多线程-Socket 编程是指在 Java 语言中使用多线程技术来实现网络编程,特别是使用 Socket 编程来实现客户端和服务器端的通信。在 Java 中,多线程可以使用 Thread 类和 Runnable 接口...

    java多线程导出excel(千万级别)优化

    轻松解决普通poi形式导出Excel的中出现的栈溢出问题,此资源可实现千万级数据分批导出csv文件,csv大数据量导出(千万级别,不会内存溢出),多线程导出 ,生产环境已经很稳定的使用着

    java多线程加队列上传文件_后台处理

    java多线程加队列上传文件_后台处理

    多线程、单线程、异步操作对比源码(Demo)

    对刚接触多线程、异步的新手有帮助,欢迎大家提意见! 效果图1:http://hi.csdn.net/space-4557050-do-album-picid-943485.html 效果图2:http://hi.csdn.net/space-4557050-do-album-picid-943486.html

    基于log4j的java异步Log的打印实现

    使用消费者-生产者模式为主要指导思想设计的多线程log打印的一个通用模块类。基于log4j,但是不需要进行特别配置,不需要单独写配置文件,自带配置文件。仅需要简单的修改即可实现smtp远程log模式。 经测验,1000条...

    java多线程设计模式详解(PDF及源码)

    (注意,本资源附带书中源代码可供参考) 多线程与并发处理是程序设计好坏优劣的重要课题,本书通过浅显易懂的文字与实例来介绍Java线程相关的设计模式概念,并且通过实际的Java程序范例和 UML图示来一一解说,书中...

    java 多线程设计模式 进程详解

    《JAVA多线程设计模式》PDF 下载 《Java线程 高清晰中文第二版》中文第二版(PDF) 前言 第一章 线程简介 Java术语 线程概述 为什么要使用线程? 总结 第二章 Java线程API 通过Thread类创建线程 使用Runable接口...

    多线程导出Excel(百万级别)_Java版优化.zip

    用开源 Apache POI 技术导出Excel,解决导出大数据出现OOM、栈溢出问题,此资源可实现百万级数据多线程分批导出Excel文件,不会内存溢出,生产环境已很稳定的使用者,所以用到的技术很核心、值得参考

Global site tag (gtag.js) - Google Analytics