`
jncz
  • 浏览: 29357 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

并发编程学习笔记8

    博客分类:
  • java
阅读更多
在线程中执行任务
在组织一个有关线程的程序的时候,第一步就是需要清晰的划分出任务的边界。在理想状况下,任务应该是相互独立的活动:任务不依赖于状态,其他任务的结果,或者受其他任务的影响。独立可以是并发更容易,而且可以并行执行,只要有足够的资源。

Server Application往往都希望有很好的吞吐量和高的响应性。当一个程序在负载过重的情况下,是变为不可用,还是有其他行为,这些都是任务执行策略需要考虑的问题。

大部分的程序都提供了一个很自然的任务界限:每个单独的客户端请求。

顺序执行任务
class SingleThreadWebServer {
    public static void main(String[] args) throws IOException {
        ServerSocket socket = new ServerSocket(80);
        while (true) {
            Socket connection = socket.accept();
            handleRequest(connection);
        }
    }
}


上面这段代码就是一个顺序执行的例子。这种模型,在任务简单的情况下,是比较好的方式,减小了编程复杂性,便于理解。但是性能很差.由于单线程运行,如果负载一旦上去了,而且,有阻塞发生,则后续请求都会被阻塞。
为每个请求创建新线程
class ThreadPerTaskWebServer {
    public static void main(String[] args) throws IOException {
        ServerSocket socket = new ServerSocket(80);
        while (true) {
            final  Socket connection = socket.accept();
            Runnable task = new Runnable() {
                    public void run() {
                        handleRequest(connection);
                    }
                };
            new Thread(task).start();
        }
    }
}


以上的代码为每次请求创建新线程。这样,并发量会支持的更高。但是问题也随之而来。
  • 线程的生命周期消耗,创建和销毁线程都需要消耗资源
  • 资源的消耗,活动的线程会占用系统资源,尤其是内存资源。而内存资源的占用,又会带来垃圾收集器的消耗。如果n个线程已经时机器不堪重负,那么再增加新的线程,只会是情况更糟
  • 稳定性,线程的创建是有限制的,有OS的限制和JVM的限制,如果超过限制,则会发生不可预测的事情,而想从这些事件中恢复则比较困难,比如发生OOM问题。所以不要让你的程序触及限制值。


在一个适度的程度上,创建线程可以增加吞吐量,但是一旦超过那个限制,则会减慢程序的执行,如果创建大量的线程,则会有程序崩溃的危险。所以对多线程的程序,测试必须完善。
分享到:
评论

相关推荐

    Java并发编程学习笔记.rar

    这本"Java并发编程学习笔记"可能是作者在深入研究Java并发特性、工具和最佳实践过程中积累的心得体会。下面,我们将根据这个主题,探讨一些关键的Java并发编程知识点。 1. **线程与进程**:在多任务环境中,线程是...

    Java并发编程学习笔记

    Java并发编程是Java开发中必不可少的一部分,涉及到多线程、同步机制、线程池以及并发工具类等多个核心知识点。以下是对这些主题的详细说明: 1. **线程安全与锁 Synchronized 底层实现原理**: 线程安全是指在多...

    java并发编程学习笔记

    ### Java并发编程学习笔记知识点详解 #### 一、Java并发编程概述 Java并发编程是指在Java应用程序中同时执行多个操作的技术。它通过多线程、线程池等机制实现资源的有效利用,提高程序运行效率。Java并发编程的...

    Java并发编程学习笔记 pdf 多线程编程

    Java并发编程学习笔记,...目前,在JAVA并发编程方面的论述系统且内容详实的技术资料不太多,Java并发编程学习笔记是作者在实际工作中的经验总结,一般来说,当你读完了前8章,你已经足以可以应对JAVA的多线程编程了。

    java并发编程实践笔记

    ### Java并发编程实践笔记知识点详解 #### 一、保证线程安全的方法 1. **不要跨线程访问共享变量:** 当多个线程共享某个变量时,若其中一个线程修改了该变量,其他线程若没有正确同步,则可能读取到错误的数据。...

    JUC并发编程学习笔记(硅谷)

    "JUC并发编程学习笔记(硅谷)"很可能包含了关于Java并发工具集(Java Util Concurrency, JUC)的深入理解和实战经验。JUC是Java标准库提供的一套强大的并发处理工具,它极大地简化了多线程编程,提高了程序的可读性...

    Java并发编程学习笔记.

    Java并发编程是Java开发中的重要领域,它涉及到多线程、同步、锁机制、线程池等关键概念,是提高程序性能和效率的关键技术。在Java中,并发编程的运用可以充分利用多核处理器的能力,实现高效的多任务处理。以下是对...

    Java并发编程与高并发解决方案-学习笔记-www.itmuch.com.pdf

    本文将基于文档《Java并发编程与高并发解决方案-学习笔记***.pdf》中提供的内容,来详细阐述并发编程和高并发的基本概念、CPU多级缓存与缓存一致性、以及Java内存模型。 ### 并发与高并发概念 在现代多线程编程中...

    Java并发编程系列心得笔记

    Java并发编程系列心得笔记,可以参考,欢迎共同交流学习

    多线程与高并发编程笔记、源码等

    标题“多线程与高并发编程笔记、源码等”表明了资源的核心内容,涵盖了多线程和高并发编程的理论与实践。多线程允许一个应用程序同时执行多个任务,而高并发则指系统能够处理大量并发请求的能力。这两个概念在现代...

    Java并发编程(学习笔记).xmind

    Java并发编程 背景介绍 并发历史 必要性 进程 资源分配的最小单位 线程 CPU调度的最小单位 线程的优势 (1)如果设计正确,多线程程序可以通过提高处理器资源的利用率来提升系统吞吐率 ...

    GoLang学习资源_学习笔记和并发编程实战

    通过阅读"Go语言学习笔记",你可以建立起对Go语言全面的认知,然后借助"Go并发编程实战"来深化对并发编程的理解,结合实际编写示例程序,将理论知识转化为实践经验。 在学习过程中,建议先从基础语法开始,掌握变量...

    并发编程之一 日常学习笔记

    综上所述,这一系列学习笔记涵盖了并发编程的关键概念和实战技巧,包括Java内存模型、线程池、并发容器的使用以及常见数据结构的线程安全问题。通过深入学习这些内容,开发者可以更好地理解和解决多线程环境下的编程...

    Java并发编程与高并发解决方案笔记-基础篇.docx

    Java并发编程与高并发解决方案是开发高性能应用的关键技术。在基础篇中,主要涉及以下几个重要知识点: 1. **并发编程基础** - **并发**:并发是指在一个时间段内,多个线程交替执行,使得系统看起来像是同时处理...

    Java并发编程与高并发解决方案-学习笔记-www.itmuch.com.rar

    java并发编程与并发解决方案是自己多年开发和学习的笔记,有助于(ˇˍˇ) 想~进一步提高的java开发工程师或架构师深入的学习java架构并发处理。同时,它也是 在实际工作中多年高并发解决方案和经验的总结

    Java并发编程与高并发解决方案-学习笔记.pdf

    并发编程与高并发解决方案的学习笔记中,首先对并发与高并发进行了基本概念的介绍。并发指的是同时存在多个执行单元,但并不一定同时发生;而高并发是指系统能够同时处理很多的请求,这对于互联网分布式系统架构设计...

    图灵Java高级互联网架构师第6期并发编程专题笔记.zip

    01-并发编程之深入理解JMM&并发三大特性(一)-fox 02-并发编程之深入理解JMM&并发三大特性(二)-fox 03-01-HashMap源码解析-monkey 03-并发List、Set、 ConcurrentHashMap底层原理剖析-monkey 04-Java并发线程池...

Global site tag (gtag.js) - Google Analytics