JAVA并发
前言:这是一篇根据《java编程思想》并发章节部分做的一个总结,把自己的理解记录在此,如果有兴趣不妨静下来读一读,如果想更深入的了解可以去翻一翻书本。
概念的引出:
为什么会出现并发编程,往往是因为有相应的需求存在,所谓存在即合理嘛,既然有这样一个东西自有他的用处。提到并发编程就不得不说顺序编程了,相信大家对顺序编程再了解不过了,冯诺依曼结构就是要求计算机按照程序的顺序结构执行。
先想象一下咱们用的即时聊天工具如果把聊天功能作为一个单任务的程序来执行的话,大概的步骤就是如下这样子
1、建立连接
2、发送消息
3、接收消息
然后重复2、3,如果对方不回复消息,我们就只能处于无限的等待状态了。这就是一个阻塞问题。这个问题如何有效地解决呢?我们把单个任务分成两个任务来执行,相互之间不影响,这个就不会出现上面的问题了。
在速度的提高以多核处理器以及集群来实现的情况下,并发编程就有了用武之地,想想如果把一个程序分开为多个任务在多个处理器上处理的话,其负载将会大大的降低,提高处理器的吞吐量。如果是在单处理器的情况下,把程序切分为多个任务执行,在不考虑阻塞的情况下,其性能当然是比不上单任务执行的,因为每个任务都需要通过切换cpu时间片的得到执行。这其中就消耗了上下文的切换时间。
那么做为java语言他又是怎么去支持这样并发的呢?,首先我们得明白一个道理,Java是会共享内存、I/O等资源的,不像操作系统级别的进程,每个进程(一个运行着的程序)彼此都是独立的,独自占有自己的内存空间。Java所采用的是单一进程中创建一个或多个任务(任务由线程来驱动)的方式来实现并发。通过使用多线程机制,每一个任务由一个线程来驱动完成。一个线程就好比程序中一个单独的顺序执行流。这样一来,一个进程就可以并发的执行多个任务,每个任务底层有cpu的时间片切换执行。对用户而言是透明的。
详细介绍:
清楚了并发的来源及用处后我们可以来看看其实现方式,我们最初接触java的时候,可能都记得实现多线程编程有“两种方式”
1、继承Thread类
2、实现Runnable接口
3、当然还有第三种就是用线程池的方式来启动线程,其灵活性和效率也是逐级增高的。具体的原因我相信了解面向对象都知道,单继承的特性使得一个类如果继承了Thread失去灵活,因转而实现Runnable接口,通常低并发这种方案是可行的,但是涉及到高并发的电子商务,银行等业务的时候,线程不加以同一管理将造成内存空间极大地浪费,所以jdk5就出了个比较有影响的concurrent包。(这知识点在初级程序员面试中常有被问到)
其定义方式笔者在这不想做太多叙述,毕竟不是讲入门知识。并发通常就是定义多个任务由线程驱动执行,一个任务可以是Runnable接口的实现类,当我们稍后了解线程池的时候才知道这个接口的名字是起的多么的愚蠢。为啥不叫Task呢?在concurrent包里其实任务就叫Task了。Runnable中run方法就是该任务需要做的事情,任务不会自己执行,必须交给一个线程,线程启动时run方法就会自动被调用,这个过程是JVM帮我们完成的。,而Thread作为Runnable的实现类当然也相当于一个任务,我们重写run方法就可以我们任务要做的事情。
分享到:
相关推荐
千万级规模高性能、高并发的网络架构经验分享;亿级流量网站架构核心技术,并发编程经典实例
Netty案例集锦(并发编程篇).pdf版本,netty实战演示案例
Netty案例集锦(并发编程篇)有目录
这篇指南主要是为帮助java多线程开发人员理解并发的核心概念以及如何应用这些理念。本文的主题是关于具有java语言风格的Thread、synchronized、volatile,以及J2SE5中新增的概念,如锁(Lock)、原子性(Atomics)、并发...
关于数据库并发控制,该PPT主要以高等教育数据库系统概论为基础,介绍了锁的使用
优化方法论 我重点分享如下两个问题: 保持并发连接数,怎么样做到内存有效使用。 在高并发的同时保持高吞吐量的重要要点。 实现层面主要是三方面优化,主要聚焦在应用、框架、内核。 硬件限制可能有的...
面试题并发处理篇
并发篇.pdf
Netty案例集锦(并发编程篇)
Java并发编程与高并发解决方案笔记-基础篇.docx
提高IIS的并发访问量,达到十万的并发
一、测试目的 1、测试典型页面能支持的最大并发用户数。 2、测试典型页面在响应时间为10s 的时间内,能支持的最大并发数。 二、选择的典型页面及并发点 1、登录首页http://192.168.1.10。并发点:同时打开这个链接。...
优化nginx大并发——轻松应对上万并发访问 优化Nginx突破十万并发 搭建web nginx服务器是网站开发必不可少的技能,学好了,给公司省大钱
并发编程之深入理解JMM&并发三大特性
Brian Goetz有20多年的软件咨询行业经验,并著有至少75篇关于Java开发的文章。Tim Peierls是“现代多处理器”的典范,他在BoxPop.biz、唱片艺术和戏剧表演方面也颇有研究。推荐大家看 JAVA并发编程实践英文版(带...
面试之并发篇
本课程将结合大量图示及代码演示,带你掌握多线程并发编程(线程安全,线程调度,线程封闭,同步容器等)与高并发处理思路与手段(扩容,缓存,队列,拆分等),构建完整的并发与高并发知识体系,胜任实际开发中并发...
Java 模拟线程并发 Java, 模拟线程并发,线程,并发 Java, 模拟线程并发,线程,并发 Java, 模拟线程并发,线程,并发 Java, 模拟线程并发,线程,并发
Java并发编程与高并发解决方案笔记-基础篇Java并发编程与高并发解决方案笔记-基础篇Java并发编程与高并发解决方案笔记-基础篇Java并发编程与高并发解决方案笔记Java并发编程与高并发解决方案笔记-基础篇-基础篇Java...
并发学习并发学习并发学习并发学习并发学习