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

java并发(三)多线程的代价

 
阅读更多
从一个单线程的应用到一个多线程的应用并不仅仅带来好处,它也会有一些代价。不要仅仅为了使用多线程而使用多线程。而应该明确在使用多线程时能多来的好处比所付出的代价大的时候,才使用多线程。如果存在疑问,应该尝试测量一下应用程序的性能和响应能力,而不只是猜测。
设计更复杂
虽然有一些多线程应用程序比单线程的应用程序要简单,但其他的一般都更复杂。在多线程访问共享数据的时候,这部分代码需要特别的注意。线程之间的交互往往非常复杂。不正确的线程同步产生的错误非常难以被发现,并且重现以修复。

上下文切换的开销
当CPU从执行一个线程切换到执行另外一个线程的时候,它需要先存储当前线程的本地的数据,程序指针等,然后载入另一个线程的本地数据,程序指针等,最后才开始执行。这种切换称为“上下文切换”(“context switch”)。CPU会在一个上下文中执行一个线程,然后切换到另外一个上下文中执行另外一个线程。
上下文切换并不廉价。如果没有必要,应该减少上下文切换的发生。
你可以通过维基百科阅读更多的关于上下文切换相关的内容:
http://en.wikipedia.org/wiki/Context_switch

增加资源消耗
线程在运行的时候需要从计算机里面得到一些资源。除了CPU,线程还需要一些内存来维持它本地的堆栈。它也需要占用操作系统中一些资源来管理线程。我们可以尝试编写一个程序,让它创建100个线程,这些线程什么事情都不做,只是在等待,然后看看这个程序在运行的时候占用了多少内存。
分享到:
评论
1 楼 demoxshiroki 2015-04-27  
可否解释下 主动上下文切换,和被动上下文 切换,以及中间到一定程度如何判断,判断程序中出现锁竞争的案例了

相关推荐

    Java并发编程最全面试题 123道1

    《Java并发编程全面试题...理解并掌握这些Java并发编程的基础概念和实践技巧,对于开发高效、可靠的多线程应用程序至关重要。通过持续学习和实践,开发者可以更好地应对并发编程中的挑战,编写出更高质量的Java代码。

    Java并发编程实战.pdf

    《Java并发编程实战》是Java并发编程领域的一本经典图书,涵盖了Java中多线程编程的诸多高级概念和实践技巧。该书不仅介绍了并发编程的基本原理,还包括了各种并发工具的使用方法、常见的并发问题及其解决方案、以及...

    java并发编程综合讲解

    Java并发编程是开发高效应用程序的关键,尤其是在多核处理器环境下。Java并发编程主要涉及以下几个核心知识点: 1. **Java并发库JUC(java.util.concurrent)**: JUC库是Java平台提供的一套强大的并发工具,它...

    并发Java程序同步操作的有效删除

    在并发Java程序中,同步操作是一项关键且必要的机制,用于保证多线程环境下的数据一致性和安全性。然而,同步操作的频繁使用会带来显著的性能开销,这主要是因为线程之间的上下文切换、锁的竞争以及相关的系统调用...

    JAVA 多线程

    Java多线程是Java编程中一个重要的概念,它...总之,Java多线程是提高程序并发性和性能的重要手段。理解并掌握线程的创建、状态管理、同步和通信机制,以及避免死锁和有效调度,对于编写高效可靠的并发程序至关重要。

    JAVA多线程技术分享-39页PPT(winding)

    Java多线程技术是软件开发中的重要组成部分,尤其在高并发场景下不可或缺。本文将深入探讨多线程技术的关键知识点,以及在实际开发中容易遇到的问题。 首先,基础概念是理解多线程的关键。`Thread.sleep(0)`看似无...

    Java多线程实例

    Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,从而提高程序的效率和响应速度。在Java中,实现多线程有两种主要方式:继承`java.lang.Thread`类或实现`java.lang.Runnable`接口。 1. 继承Thread...

    Java8并行流中自定义线程池操作示例

    这些流可以提高执行性能,以牺牲多线程的开销为代价。在这篇短文中,我们将看一下 Stream API的最大限制,同时看一下如何让并行流和线程池实例(ThreadPool instance)一起工作。 知识点:Java8引入了流的概念,流是...

    Java与线程.pdf

    在多线程环境中,这些线程可以并行执行,提高程序的执行效率。线程的主要优点是可以将一个进程的资源分配和执行调度分开,使各个线程既可以共享进程资源,又能独立调度,从而提高程序的并发性能。 #### 二、线程的...

    Effective Java第三版1

    讨论Java并发工具和最佳实践,如何编写线程安全的代码,以及避免并发问题。 ### 第九章 序列化 解释如何有效地实现序列化,以及序列化可能带来的安全和性能问题。 ### 第十章 注解 介绍注解的使用,自定义注解的...

    java线程初学者帮助

    `synchronized`关键字可以用于方法或代码块,确保同一时间只有一个线程可以访问被标记的方法或代码块,从而避免了多线程并发修改同一资源导致的问题。 **2. Lock接口** `java.util.concurrent.locks.Lock`接口提供...

    多线程安全问题的测试.txt

    Java中线程问问题描述,多线程的优势(进程线程区别): 1、进程之间不能共享内存,线程之间共享内存更容易,多线程可协作...2、创建进程进行资源分配的代价较创建线程要大得多,所以多线程在高并发环境中效率更高。

    Java中对AtomicInteger和int值在多线程下递增操作的测试

    在Java编程语言中,多线程环境下的并发操作是一个重要的主题。为了确保数据在并发访问时的正确性,Java提供了一系列的原子类,包括`AtomicInteger`,它为整数类型的变量提供了线程安全的更新操作。这个话题将深入...

    顶尖的Java多线程、锁、内存模型面试题!.docx

    ### 顶尖的Java多线程、锁、内存模型面试题详解 #### Synchronized相关问题解析 **问题一:Synchronized用过吗,其原理是什么?** `Synchronized` 是 Java 语言提供的一种同步机制,用于确保共享资源在多线程环境...

    程序、进程、线程的区别

    - 多线程编程在Java中尤其重要,Java提供了丰富的并发API如`Thread`类、`ExecutorService`和`Future`接口,以及`synchronized`、`volatile`等关键字来处理并发问题。 - 并发编程需要考虑线程安全、竞态条件、死锁...

Global site tag (gtag.js) - Google Analytics