`
lantian_123
  • 浏览: 1372244 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

关于并发的一篇短文

    博客分类:
  • Java
 
阅读更多

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方法就可以我们任务要做的事情。

 

 

 


 

1
0
分享到:
评论

相关推荐

    用英文写一篇短文介绍计算机语言的发展历史和特点,要求简单介绍机器语言、汇编语言、高级语言的简单发展历程和各自的特点。

    而像Go、Rust这样的新语言,则是为了应对多核处理器时代而设计,优化了并发和内存管理。 总的来说,计算机语言从机器语言到高级语言,再到各种特定领域的语言,反映了人们对计算复杂性的掌控能力和对编程效率的追求...

    java读写文件

    本篇将围绕“Java读写文件”这一主题,深入探讨相关的知识点。 首先,Java提供了多种方式来读写文件。最基础的是使用`java.io`包中的`File`类来创建、读取和写入文件。`File`对象可以表示文件或目录路径,并提供了...

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

    在这篇短文中,我们将看一下 Stream API的最大限制,同时看一下如何让并行流和线程池实例(ThreadPool instance)一起工作。 知识点:Java8引入了流的概念,流是作为一种对数据执行大量操作的有效方式。并行流可以被...

    高性能ASP-NET应用程序的探讨与研究共4页.pdf.z

    尽管篇幅不长,但通常这样的短文会力求浓缩精华,提供针对性的解决方案或建议。文档以ZIP格式压缩,可能是为了便于传输和存储。 【标签】:“高性能ASP_NET应用程序的探” 这个标签进一步确认了文档的主题,即对...

    【精品】高三英语精准培优专练 ∶完形填空(附解析).doc

    学生需要在阅读一篇有空白的短文时,根据文章内容选择最佳选项来填空。 2. 文章结构与情感表达:文章通过讲述作者与其宠物狗Flash的故事,展现了宠物在人生活中的重要角色,以及如何在困境中给予支持和慰藉。同时,...

    东北大学计算机考研全攻略

    - **英语口语测试**:阅读并概括一篇短文。 - **专业课问答**:询问考生的项目经历、未来研究方向等。 #### 二、东北大学计算机各方向介绍 **2.1 计算机系统结构方向** - 重点研究计算机系统的组织结构及其相互...

Global site tag (gtag.js) - Google Analytics