`
85977328
  • 浏览: 1873351 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java并发(二)多线程的优点

 
阅读更多
尽管面临很多挑战,多线程有一些优点使得它一直被使用。这些优点是:
  • 资源利用率更好
  • 程序设计在某些情况下更简单
  • 程序响应更快

资源利用率更好
想象一下,一个应用程序需要从本地文件系统中读取和处理文件的情景。比方说,从磁盘读取一个文件需要5秒,处理一个文件需要2秒。处理两个文件则需要:

5秒读取文件A
2秒处理文件A
5秒读取文件B
2秒处理文件B
---------------------
总共需要14秒

从磁盘中读取文件的时候,大部分的CPU时间用于等待磁盘去读取数据。在这段时间里,CPU非常的空闲。它可以做一些别的事情。通过改变操作的顺序,就能够更好的使用CPU资源。看下面的顺序:

5秒读取文件A
5秒读取文件B + 2秒处理文件A
2秒处理文件B
---------------------
总共需要12秒
CPU等待第一个文件被读取完。然后开始读取第二个文件。当第二文件在被读取的时候,CPU会去处理第一个文件。记住,在等待磁盘读取文件的时候,CPU大部分时间是空闲的。

总的说来,CPU能够在等待IO的时候做一些其他的事情。这个不一定就是磁盘IO。它也可以是网络的IO,或者用户输入。通常情况下,网络和磁盘的IO比CPU和内存的IO慢的多。

程序设计更优雅
在单线程应用程序中,如果你想编写程序手动处理上面所提到的读取和处理的顺序,你必须记录每个文件读取和处理的状态。相反,你可以启动两个线程,每个线程处理一个文件的读取和操作。线程会在等待磁盘读取文件的过程中被阻塞。在等待的时候,其他的线程能够使用CPU去处理已经读取完的文件。其结果就是,磁盘总是在繁忙地读取不同的文件到内存中。这会带来磁盘和CPU利用率的提升。而且每个线程只需要记录一个文件,因此这种方式也很容易编程实现。

程序响应更快
将一个单线程应用程序变成多线程应用程序的另一个常见的目的是实现一个响应更快的应用程序。设想一个服务器应用,它在某一个端口监听进来的请求。当一个请求到来时,它去处理这个请求,然后再返回去监听。
服务器的流程如下所述:
while(server is active){
    listen for request
    process request
}
如果一个请求需要占用大量的时间来处理,在这段时间内新的客户端就无法发送请求给服务端。只有服务器在监听的时候,请求才能被接收。另一种设计是,监听线程把请求传递给工作者线程(worker thread),然后立刻返回去监听。而工作者线程则能够处理这个请求并发送一个回复给客户端。这种设计如下所述:
while(server is active){
    listen for request
    hand request to worker thread
}
这种方式,服务端线程迅速地返回去监听。因此,更多的客户端能够发送请求给服务端。这个服务也变得响应更快。

桌面应用也是同样如此。如果你点击一个按钮开始运行一个耗时的任务,这个线程既要执行任务又要更新窗口和按钮,那么在任务执行的过程中,这个应用程序看起来好像没有反应一样。相反,任务可以传递给工作者线程(word thread)。当工作者线程在繁忙地处理任务的时候,窗口线程可以自由地响应其他用户的请求。当工作者线程完成任务的时候,它发送信号给窗口线程。窗口线程便可以更新应用程序窗口,并显示任务的结果。对用户而言,这种具有工作者线程设计的程序显得响应速度更快。

分享到:
评论

相关推荐

    Java多线程编程的优点和缺点

    加快响应用户的时间:多线程允许并发执行多个任务,可以充分利用多核处理器,从而提高程序的性能和响应速度。比如我们经常用的迅雷下载,都喜欢多开几个线程去下载,谁都不愿意用一个线程去下载,为什么呢?答案很简单,...

    java 并发编程实践 001

    java 并发编程实践001 002 两个文件全部下载后 用 7z解压 第1章 介绍 1.1 并发的(非常)简短历史 1.2 线程的优点 1.3 线程的风险 1.4 线程无处不在 第1部分 基础 第2章 线程安全 2.1 什么是线程安全性 2.2 原子...

    JAVA多线程并发下的单例模式应用

    单例模式应该是设计模式中比较简单的一个,也是非常常见的,但是在多线程并发的环境下使用却是不那么简单了,今天给大家分享一个我在开发过程中遇到的单例模式的应用。 首先我们先来看一下单例模式的定义: 一个类有...

    Java常用并发设计模式精讲

    Java常用并发设计模式精讲 内容简介: 1、优雅终止线程的设计模式 2、避免共享的设计模式 3、多线程版本的if模式 4、多线程分工模式 5、生产者 - 消费者模式的优点 6、过饱问题解决方案

    毕业论文-Java 航空订票系统

    Java语言是一个支持网络计算的面向对象程序设计语言,吸收了Smalltalk语言和C++语言的优点,并增加了其它特性,如支持并发程序设计、网络通信和多媒体数据控制等。主要特性如下:  1、面向对象性:Java语言是一个纯...

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    │ │ 9.JAVA并发编程之多线程并发同步业务场景与解决方案.wmv │ │ │ ├─10.微服务架构之Spring Cloud Eureka 场景分析与实战 │ │ 10.微服务架构之Spring Cloud Eureka 场景分析与实战.wmv │ │ │ ├─11....

    java设计与开发即时通讯工具-程序源代码-论文设计

    技术上采用sun公司的java语言,该语言有很多有点,比如多线程、网络流概念、异常捕获处理、安全性以及速度与性能等方面,并且具有可以一次编写、到处运行的跨平台优点。 多线程:多线程是这样一种机制,它允许在程序...

    9F83185B-E322-46C9-9CC5-DB2DB3F9127C.jpeg

    Java 给多线程编程提供了内置的支持。...使用多线程的优点 1、 提高应用程序的响应。对图形化界面更有意义,可增强用户体验 2、 提高计算机系统CPU的利用率 3、 改善程序结构。将既长又复杂的进程分为多

    java常见面试题汇总(附答案).pdf

    多线程:支持多线程编程,提高了程序的并发性能。 开源:Java 的开源性质促进了生态系统的发展和创新。 什么是 JVM,它的作用是什么? JVM(Java Virtual Machine)是 Java 虚拟机的缩写,它是 Java 程序的运行环境...

    java随机数

    在Java EE多线程应用程序的环境中,随机生成实例对象仍然可以被存储在类或其他实现类,作为一个静态属性。幸运的是,java.util.Random是线程安全的,所以不存在多个线程调用会破坏种子(seed)的风险。 另一个值得...

    Java理论与实践:流行的原子

    本文介绍了要使用多处理器系统的功能,通常需要使用多线程构造应用程序。但是正如任何编写并发应用程序的人可以告诉你的那样,要获得好的硬件利用率,只是简单地在多个线程中分割工作是不够的,还必须确保线程确实大...

    Java全方面面试题,很全

    javaWeb,java基础,java异常,jsp&servlet,JVM,Linux,多线程并发,集合容器 springboot框架,数据结构,数据库,算法 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意...

    java在网站开发上的优势

    Java语言之所以受人推崇,是因为它确实称得上是一种新一代编程语言,具有面向对象、可移植性好、与硬件无关、系统强健安全、提供了并发机制、性能高的众多优点,并提供了茶叶网站分布性、多线程、动态性的支持。

    \java超强笔记(超级经典)

    java.util.concurrent 包含了常用的多线程工具,是新的多线程工具的主体。 java.util.concurrent.atomic 包含了不用加锁情况下就能改变值的原子变量。 java.util.concurrent.locks 包含锁定的工具。 ...

    java面试题

    51.3. 多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 24 51.4. 线程同步的方法。 24 51.5. java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 25...

    开涛高可用高并发-亿级流量核心技术

    3.1 线程隔离 43 3.2 进程隔离 45 3.3 集群隔离 45 3.4 机房隔离 46 3.5 读写隔离 47 3.6 动静隔离 48 3.7 爬虫隔离 49 3.8 热点隔离 50 3.9 资源隔离 50 3.10 使用Hystrix实现隔离 51 3.10.1 Hystrix简介 51 3.10.2...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     21.1 多个事务并发运行时的并发问题  21.1.1 第一类丢失更新  21.1.2 脏读  21.1.3 虚读  21.1.4 不可重复读  21.1.5 第二类丢失更新  21.2 数据库系统的锁的基本原理  21.2.1 锁的多粒度性及自动锁升级  ...

    concurrent-computing-examples:里约热内卢联邦大学用C和Java进行并发计算学科的并发计算的实现示例

    创建线程的第一个概念是在多个线程中创建一个hello世界,并提出并发计算的概念 显示使用线程操作数组,将每个位置的值增加1 执行矩阵与向量相乘的程序,具有顺序版本和具有不同并发解决方案的版本。 执行方矩阵与方...

Global site tag (gtag.js) - Google Analytics