全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

java 同步、异步、阻塞和非阻塞分析

java 同步、异步、阻塞和非阻塞分析

概要:

正常情况下,我们的程序以同步非阻塞的方式在运行。但是我们的程序总会出现一些耗时操作,比如复杂的计算(找出1到10亿之间的素数)和程序本身无法控制的操作(IO操作、网络请求)。包含这些耗时操作的方法我们可以把它称为阻塞方法,包含这些耗时操作的任务我们可以把它称为阻塞任务。阻塞与非阻塞是以是否耗时来定义的。

如果程序中存在大量阻塞操作,就会影响程序性能。但是阻塞的存在是客观事实,我们的程序是无法改变它的,一个网络请求需要3秒才能响应,我们不可能让它1毫秒就能响应,因为接受请求的服务器可能完全不由我们控制。但是我们可以改变处理阻塞的方式——以异步的方式处理阻塞任务。实现异步的主要技术就是多线程。图示:

同步和异步是个时序概念。同步就是同时只执行一个任务,而异步则是同时执行多个任务。

代码示例

模拟网络请求:



package com.zzj.asyn; 
 
public class HttpRequest { 
  private Callable callable; 
   
  public HttpRequest(Callable callable) { 
    this.callable = callable; 
  } 
   
  public void send(){ 
    // 模拟网络请求 
    try { 
      Thread.sleep(1000 * 5); 
    } catch (InterruptedException e) { 
      e.printStackTrace(); 
      Thread.currentThread().interrupt(); 
    } 
    // 回调 
    this.callable.call("Hello world!"); 
  } 
   
  public interface Callable{ 
    void call(String result); 
  } 
} 

以同步方式处理阻塞任务:

package com.zzj.asyn; 
 
import com.zzj.asyn.HttpRequest.Callable; 
 
/** 
 * 以同步的方式处理阻塞任务 
 * @author lenovo 
 * 
 */ 
public class App { 
  public static void main(String[] args) { 
    new HttpRequest(new Callable() { 
      @Override 
      public void call(String result) { 
        System.out.println("Thread:" + Thread.currentThread().getName()); 
        System.out.println("Message from remote server:" + result); 
      } 
    }).send(); 
    System.out.println("Thread " + Thread.currentThread().getName() + " is over!"); 
  } 
} 

结果:

Thread:main 
Message from remote server:Hello world! 
Thread main is over! 

以异步的方式处理阻塞任务:

package com.zzj.asyn; 
 
import com.zzj.asyn.HttpRequest.Callable; 
 
/** 
 * 以异步的方式处理阻塞任务 
 * @author lenovo 
 * 
 */ 
public class App2 { 
  public static void main(String[] args) { 
    new Thread(new Runnable() { 
      @Override 
      public void run() { 
        new HttpRequest(new Callable() { 
          @Override 
          public void call(String result) { 
            System.out.println("Thread:" + Thread.currentThread().getName()); 
            System.out.println("Message from remote server:" + result); 
          } 
        }).send(); 
      } 
    }).start(); 
    System.out.println("Thread " + Thread.currentThread().getName() + " is over!"); 
  } 
} 

结果:

Thread main is over! 
Thread:Thread-0 
Message from remote server:Hello world! 

 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# java  # 同步、异步、阻塞和非阻塞  # 同步、异步、阻塞和非阻塞详解几简单实例  # 简述JAVA同步、异步、阻塞和非阻塞之间的区别  # java 中同步、异步、阻塞和非阻塞区别详解  # 详解socket阻塞与非阻塞  # 同步与异步、I/O模型  # 浅谈socket同步和异步、阻塞和非阻塞、I/O模型  # 科学知识:同步、异步、阻塞和非阻塞区别  # 一篇文章理解阻塞、非阻塞、同步、异步  # 我们可以  # 把它  # 就会  # 是个  # 不可能  # 就能  # 多个  # 则是  # 希望能  # 总会  # 让它  # 谢谢大家  # 回调  # 多线程  # 与非  # 情况下  # HttpRequest  # asyn  # public  # private 


相关文章: 济南企业网站制作公司,济南社保单位网上缴费步骤?  建站之星免费模板:自助建站系统与智能响应式一键生成  建站主机是否等同于虚拟主机?  建站为何优先选择香港服务器?  外汇网站制作流程,如何在工商银行网站上做外汇买卖?  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  上海网站制作开发公司,上海买房比较好的网站有哪些?  建站之星伪静态规则如何设置?  Python多线程使用规范_线程安全解析【教程】  三星网站视频制作教程下载,三星w23网页如何全屏?  常州企业网站制作公司,全国继续教育网怎么登录?  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  西安大型网站制作公司,西安招聘网站最好的是哪个?  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  如何选择靠谱的建站公司加盟品牌?  建站之星图片链接生成指南:自助建站与智能设计教程  网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?  成都网站制作公司哪家好,四川省职工服务网是做什么用?  c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】  c++怎么用jemalloc c++替换默认内存分配器【性能】  制作宣传网站的软件,小红书可以宣传网站吗?  天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?  Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解  建站168自助建站系统:快速模板定制与SEO优化指南  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  宿州网站制作公司兴策,安徽省低保查询网站?  如何用免费手机建站系统零基础打造专业网站?  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  枣阳网站制作,阳新火车站打的到仙岛湖多少钱?  ,南京靠谱的征婚网站?  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?  微信小程序 五星评分(包括半颗星评分)实例代码  建站主机选购指南:核心配置优化与品牌推荐方案  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  ,制作一个手机app网站要多少钱?  定制建站价位费用解析与套餐推荐全攻略  如何在Windows虚拟主机上快速搭建网站?  h5网站制作工具有哪些,h5页面制作工具有哪些?  香港网站服务器数量如何影响SEO优化效果?  Python路径拼接规范_跨平台处理说明【指导】  TestNG的testng.xml配置文件怎么写  高端云建站费用究竟需要多少预算?  如何快速生成专业多端适配建站电话?  在线制作视频网站免费,都有哪些好的动漫网站?  建站之星与建站宝盒如何选择最佳方案? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。