`
85977328
  • 浏览: 1899407 次
  • 性别: 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单线程多线程

    多线程的优点包括: 1. **提高系统利用率**:通过多线程可以充分利用多核CPU资源,提高计算密集型应用的性能。 2. **增强程序的并发能力**:多线程允许程序同时执行多个任务,从而提高了程序的整体吞吐量。 3. **...

    java多线程Demo

    Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在Java中,实现多线程有两种主要方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当我们创建一个新...

    JAVA多线程端口扫描器

    通过学习和实践这个Java多线程端口扫描器项目,开发者不仅可以深化对Java多线程编程的理解,还能掌握网络通信和并发控制的关键技能。此外,对于网络安全分析和服务器管理等领域也有实际的应用价值。

    Java多线程-Socket编程

    Java 多线程-Socket 编程是一种高效的网络编程方式,能够提高服务器端的并发处理能力和性能。但是,需要正确地使用 ExecutorService 和 Socket 库,并 consideration of线程安全问题和 Socket 连接的管理。

    Java多线程并发执行demo代码实例

    "Java多线程并发执行demo代码实例" 在Java编程中,多线程并发执行是非常重要的概念,它可以提高程序的执行效率和响应速度。今天,我们通过一个demo代码实例来学习Java多线程并发执行的实现。 知识点1:泛型 在...

    Java多线程编程详解

    #### 二、Java中实现多线程的两种方法 Java提供了丰富的API支持多线程编程,主要通过`java.lang.Thread`类和`java.lang.Runnable`接口实现。以下详细介绍这两种方法: 1. **继承Thread类** - 实现方式:通过继承...

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

    Java多线程编程是开发高效率、高性能应用的关键技术之一,尤其在当今多核处理器普及的时代。通过创建多个线程,程序能够同时处理多个任务,从而显著提高响应速度和资源利用率。然而,多线程也带来了一系列挑战和潜在...

    java并发实战编程 英文版

    《Java并发实战编程》是一本深入探讨Java多线程编程技术的专业书籍,旨在帮助开发者理解和掌握并发编程的核心概念和最佳实践。并发编程是现代软件开发中的关键领域,尤其是在多核处理器普及的今天,利用线程并行执行...

    多线程编程(java)

    多线程编程是指在一个程序中并发执行多个指令流,每个指令流称为一个线程,彼此间互相独立。线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立的存储空间,而是和...

    详细剖析JAVA多线程案例教学

    #### 二、Java多线程基础 ##### 1. 线程的概念 线程是程序执行流的最小单元,是操作系统能够进行运算调度的最小单位。一个标准的解释是:“线程是一种轻量级进程,它是进程内的一个执行实体。”Java中的每个程序至少...

    Java实现的多线程RC4加密

    Java实现的多线程RC4加密是一个在编程领域中涉及安全性和并发处理的重要主题。RC4(Rivest Cipher 4)是一种流式加密算法,由Ron Rivest于1987年设计,广泛用于数据保护,如网络通信、文件加密等。而多线程则是Java...

    基于Java多线程的并发机制的研究和实现

    ### 基于Java多线程的并发机制的研究和实现 #### 1. 进程与线程的概念比较 在探讨Java多线程机制之前,我们先了解进程和线程的基本概念及其区别。 - **进程**:进程是操作系统中能够独立运行的基本单位,它包含了...

    Java多线程

    Java多线程知识点梳理: ...对于有一定Java基础但缺乏多线程和并发编程经验的开发者来说,本教程提供了快速上手的指导。学习完本教程之后,开发者将能编写简单的线程程序,并能够理解和应用线程间的通信和同步机制。

    用JAVA实现缓冲多线程无阻塞读取远程文件.doc

    多线程下载的优点在于可以充分利用多核处理器的能力,同时可以从远程服务器获取数据,减少等待时间。然而,多线程也会带来一些挑战,如线程同步问题、死锁和超时处理等。在上述代码中,作者提到当下载速度足够快时,...

    Java并发编程实战.pptx

    Java并发编程实战是指在Java语言中实现多线程编程的技术和方法,以提高程序的响应速度、可靠性和可扩展性。Java并发编程实战需要了解Java中的线程模型、锁机制、线程池、并发集合类等概念和技术,以及如何使用Java中...

    基于Java多线程技术的网络编程.pdf

    Java多线程技术的优点包括: 1. 提高程序执行效率:Java的多线程技术可以减少并发并行程序设计的困难,提高程序执行效率。 2. 提供并发机制:Java的多线程技术可以提供并发机制,实现高效的网络通信和数据处理。 3....

    java 多线程

    Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,从而提高系统效率和资源利用率。在Java中,实现多线程有两种主要方式:通过实现`Runnable`接口或者继承`Thread`类。 一、实现Runnable接口 ...

    Java并发编程实践.pdf

    在传统的多线程环境下,需要共享某些数据,但为了避免竞争条件引致数据出现不一致的情况,某些代码段需要变成基于锁(Lock based)的原子操作去执行。Amino提供了无锁数据结构,如LockFreeQueue等,以避免竞争条件,...

Global site tag (gtag.js) - Google Analytics