原标题:JAVA多线程的同步和 异步

1.多线程和异步操作的异同

多线程和异步操作两者都可以达到避免调用线程阻塞的目的,从而提高软件的可响应性。甚至有些时候我们就认为多线程和异步操作是等同的概念。但是,多线程和异步操作还是有一些区别的。而这些区别造成了使用多线程和异步操作的时机的区别。

2.异步操作的本质

所有的程序最终都会由计算机硬件来执行,所以为了更好的理解异步操作的本质,我们有必要了解一下它的硬件基础。 熟悉电脑硬件的朋友肯定对DMA这个词不陌生,硬盘、光驱的技术规格中都有明确DMA的模式指标,其实网卡、声卡、显卡也是有DMA功能的。

DMA就是直接内存访问的意思,也就是说,拥有DMA功能的硬件在和内存进行数据交换的时候可以不消耗CPU资源。只要CPU在发起数据传输时发送一个指令,硬件就开始自己和内存交换数据,在传输完成之后硬件会触发一个中断来通知操作完成。这些无须消耗CPU时间的I/O操作正是异步操作的硬件基础。所以即使在DOS这样的单进程(而且无线程概念)系统中也同样可以发起异步的DMA操作。

3.线程的本质

线程不是一个计算机硬件的功能,而是操作系统提供的一种逻辑功能,线程本质上是进程中一段并发运行的代码,所以线程需要操作系统投入CPU资源来运行和调度。

4.异步操作的优缺点

因为异步操作无须额外的线程负担,并且使用回调的方式进行处理,在设计良好的情况下,处理函数可以不必使用共享变量(即使无法完全不用,最起码可以减少共享变量的数量),减少了死锁的可能。当然异步操作也并非完美无暇。编写异步操作的复杂程度较高,程序主要使用回调方式进行处理,与普通人的思维方式有些初入,而且难以调试。

5.多线程的优缺点

多线程的优点很明显,线程中的处理程序依然是顺序执行,符合普通人的思维习惯,所以编程简单。但是多线程的缺点也同样明显,线程的使用(滥用)会给系统带来上下文切换的额外负担。并且线程间的共享变量可能造成死锁的出现。

6.适用范围

在了解了线程与异步操作各自的优缺点之后,我们可以来探讨一下线程和异步的合理用途。我认为:当需要执行I/O操作时,使用异步操作比使用线程+同步I/O操作更合适。I/O操作不仅包括了直接的文件、网络的读写,还包括数据库操作、Web Service、HttpRequest以及.Net Remoting等跨进程的调用。

而线程的适用范围则是那种需要长时间CPU运算的场合,例如耗时较长的图形处理和算法执行。但是往往由于使用线程编程的简单和符合习惯,所以很多朋友往往会使用线程来执行耗时较长的I/O操作。这样在只有少数几个并发操作的时候还无伤大雅,如果需要处理大量的并发操作时就不合适了。

7.线程同步与异步区别

线程同步:是多个线程同时访问同一资源,等待资源访问结束,浪费时间,效率低

线程异步:访问资源时在空闲等待时同时访问其他资源,实现多线程机制

异步处理就是,你现在问我问题,我可以不回答你,等我有时间了再处理你这个问题.同步不就反之了,同步信息被立即处理 -- 直到信息处理完成才返回消息句柄;异步信息收到后将在后台处理一段时间 -- 而早在信息处理结束前就返回消息句柄返回搜狐,查看更多

责任编辑:

java登录时启动后台异步线程_JAVA多线程的同步和 异步相关推荐

  1. java 高效的多线程同步_java多线程的同步和异步

    java多线程的同步和异步 Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言.Java 技术具有卓越的通用性.高效性.平台移植性和安全性,广泛应用于PC.数据中心.游戏控制台.科学超级计算 ...

  2. Java多线程基础学习,Thread解读、java线程的状态、同步和异步、两阶段终止模式

    理论概述 单线程和多线程 为什么要使用多线程呢?多线程有什么好处呢? 如果在程序中,需要读写一个文件,该文件很大,那我们执行到该io操作时,cpu就会等待该io操作执行完才会继续运行下面的代码,进程调 ...

  3. java进程与线程_Java多线程笔记(零):进程、线程与通用概念

    前言 不积跬步,无以至千里:不积小流,无以成江海.在学习Java多线程相关的知识前,我们首先需要去了解一点操作系统的进程.线程以及相关的基础概念. 进程 通常,我们把一个程序的执行称为一个进程.反过来 ...

  4. 简述java的线程_Java多线程的简述

    线程与进程 进程: ​ 是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程:进程也是程序的一次执行过程,是系统运行程序的基本单位:系统运行一个程序即是一个进 ...

  5. java 同步异步_Java中的同步于异步

    java异步同步应用 所谓异步输入输出机制,是指在进行输入输出处理时,不必等到输入输出处理完毕才返回.所以异步的同义语是非阻塞(None Blocking). 网上有很多网友用很通俗的比喻 把同步和异 ...

  6. 什么是java线程_Java多线程是什么意思?

    展开全部 Java多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用ExecutorService.Callable.Future实现有返回结果的多636f707932313 ...

  7. java同步和异步机制_JAVA学习过程中的知识——java多线程的同步和异步

    1.多线程和异步操作的异同 多线程和异步操作两者都可以达到避免调用线程阻塞的目的,从而提高软件的可响应性.甚至有些时候我们就认为多线程和异步操作是等同的概念.但是,多线程和异步操作还是有一些区别的.而 ...

  8. 远程桌面中指定在用户登录时启动的程序

    使用组策略(最佳操作) 打开"组策略". 在"计算机配置"."管理模板"."Windows 组件"."终端服务 ...

  9. java 线程之对象的同步和异步

    一.多线程环境下的同步与异步 同步:A线程要请求某个资源,但是此资源正在被B线程使用中,因为同步机制存在,A线程请求不到,怎么办,A线程只能等待下去. package com.jalja.org.th ...

最新文章

  1. ecshop /api/client/api.php、/api/client/includes/lib_api.php SQL Injection Vul
  2. python图片旋转脚本_Python+OpenCV 实现图片无损旋转90°且无黑边
  3. java 返回值判断_在Java中判断方法重载的条件除了参数外,还可以通过返回值类型判断。_学小易找答案...
  4. 利用gearman实现redis缓存mysql
  5. 【转】工厂模式面向接口编程
  6. linux c 内存分配函数
  7. java并发编程实践学习---java的类锁和对象锁
  8. 日常检查IBM P系列小型机状态的项目及其相关命令
  9. spring源码刨析总结
  10. 为什么软件工程师找不到工作?我想分享四个“恐怖故事”
  11. Kubernetes集群(概念篇)
  12. 第三十讲:Android之Animation(五)
  13. spring aop 声明式事务管理
  14. github提交代码403
  15. Javascript 通用Excel导出函数
  16. 视频编码方案之间的比较(HEVC,H.264,MPEG2等)
  17. python地震数据处理_Python爬虫之实时地震数据
  18. 吉他录音混音教程入门|连这些录音知识都不懂,以后还怎么“混”?| MZD Studios
  19. 使用QT遍历Json文档及搜索子对象
  20. 如何测试口红真假软件,如何辨别大牌口红的真假 看这一篇就够了

热门文章

  1. Web开发人员月报2018年9月
  2. 自动控制原理专业词汇中英文对照(二)
  3. 智能拼图和魔法寿司-康佳6670
  4. Everyone Piano v2.2.10.16 WiN 电脑键盘钢琴模拟软件
  5. 2022智慧工地管理系统多少钱一套
  6. IPRAN PTNRAN
  7. x86 openwrt固件编译
  8. 可视库位电子纸广泛应用仓储管理
  9. 呼叫中心系统电话评价服务功能
  10. VSCode-darwin-universal.zip 下载 mac os 版本