`
lantian_123
  • 浏览: 1365402 次
  • 性别: 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
分享到:
评论

相关推荐

    Netty案例集锦(并发编程篇).pdf

    总之,《Netty案例集锦(并发编程篇)》是一份深入探讨Netty并发编程实践的资料,涵盖了Netty的核心组件、设计模式以及在并发环境下的性能优化策略。通过学习和实践这些案例,开发者能够掌握Netty在实际项目中的应用,...

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

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

    关于并发的书籍

    千万级规模高性能、高并发的网络架构经验分享;亿级流量网站架构核心技术,并发编程经典实例

    百万并发下的Nginx优化,看这一篇就够了!

      优化方法论 我重点分享如下两个问题: 保持并发连接数,怎么样做到内存有效使用。 在高并发的同时保持高吞吐量的重要要点。 实现层面主要是三方面优化,主要聚焦在应用、框架、内核。 硬件限制可能有的...

    怎样确定一个实际系统的并发用户数

    在项目的性能测试过程中,确定一个实际系统的并发用户数是非常重要的步骤。并发用户数是指在同一时间段内访问系统的用户数量,影响着系统的性能和稳定性。本文将详细介绍如何确定一个实际系统的并发用户数。 什么是...

    如何快速实现高并发短文检索

    ### 如何快速实现高并发短文检索 #### 需求背景 ...综上所述,“内存hash+IDlist”方案作为一种轻量级、高性能的检索方法,在满足高并发短文检索需求的同时,也提供了较为灵活的扩展性和优化空间。

    帆软7.0.4并发补丁

    【帆软7.0.4并发补丁】是一款针对帆软报表软件FineReport 7.0.4版本的优化工具,其主要目的是解决在多用户同时访问时可能出现的并发访问限制问题。在企业环境中,特别是在大数据量处理和高并发访问的情况下,系统的...

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

    - **并发**:并发是指在一个时间段内,多个线程交替执行,使得系统看起来像是同时处理多个任务。在单核CPU中,通过线程的切换实现并发;在多核CPU中,每个线程可以分配到一个独立的处理器核上,真正实现并行执行。 ...

    操作系统原理课件,关于并发处理

    操作系统原理中的并发处理是计算机科学中一个核心的概念,它涉及到多个任务或程序在一段时间内同时进行的执行方式。在并发处理中,我们可以将程序的执行分为两种基本模式:顺序执行和并发执行。 顺序执行是传统程序...

    java并发编程实战源码,java并发编程实战pdf,Java

    《Java并发编程实战》是Java并发编程领域的一本经典著作,它深入浅出地介绍了如何在Java平台上进行高效的多线程编程。这本书的源码提供了丰富的示例,可以帮助读者更好地理解书中的理论知识并将其应用到实际项目中。...

    java并发编程2

    Java并发编程是Java开发中的重要领域,特别是在多核处理器和分布式系统中,高效地利用并发可以极大地提升程序的性能和响应速度。以下是对标题和描述中所提及的几个知识点的详细解释: 1. **线程与并发** - **线程*...

    Java 并发编程实战.pdf

    《Java并发编程实战》这本书是关于Java语言中并发编程技术的经典著作。它详细介绍了如何在Java环境中有效地实现多线程程序和并发控制机制。在Java平台上,由于其本身提供了强大的并发编程支持,因此,掌握并发编程...

    提高IIS的并发访问量,达到十万的并发

    提高 IIS 的并发访问量达到十万的并发 IIS(Internet Information Services)是微软推出的 Web 服务器,性能较之前有很大的提升。但是,IIS 的默认设置并不适合高并发的请求。为了提高 IIS 的并发访问量,达到十万...

    ORACLE最大并发数查询

    本文将基于给定文件的标题、描述、标签以及部分内容,深入探讨如何查询Oracle数据库的最大并发数,以及这一参数对系统性能的影响。 ### Oracle最大并发数查询 在企业级应用中,Oracle数据库因其强大的数据处理能力...

    Netty案例集锦(并发编程篇)

    《Netty案例集锦:并发编程篇》 Netty,作为一个高性能、异步事件驱动的网络应用程序框架,广泛应用于各种高并发场景。本篇将深入探讨Netty在并发编程方面的特性,以及它如何通过独特的线程模型来实现高效且稳定的...

    高并发解决方案

    在IT行业中,高并发解决方案是针对大量用户同时访问或操作同一系统、应用或服务时,保证系统稳定...文件"2016"可能包含的是2016年关于高并发解决方案的资料,深入学习这些资料,可以对当时的实践和趋势有更全面的了解。

    .net高并发解决方案

    在.NET开发环境中,面对高并发问题,开发者需要采取一系列策略来优化系统性能,确保服务的稳定性和可扩展性。本示例将重点关注使用Entity Framework(EF)作为关系型数据库访问框架,以及RabbitMQ作为消息队列服务在...

    Java高并发视频教学,并带实战java高并发程序设计,高并发面试题目

    首先,"Java线程并发面试题87.pdf"很可能包含了87个关于Java并发的常见面试问题,这些问题涵盖了线程基础知识、同步机制、线程池、死锁避免与解决、并发集合类的使用等多个方面。例如,可能会讨论Java中如何实现线程...

    【资料】并发测试报告

    并发测试是一种软件测试方法,用于确定系统在高负载情况下运行的能力。它旨在评估在多用户同时使用系统时的性能表现,确保系统能够处理预期的最大并发用户数而不会发生性能瓶颈或崩溃。并发测试的主要目的是找出可能...

    (PDF带目录)《Java 并发编程实战》,java并发实战,并发

    《Java 并发编程实战》是一本专注于Java并发编程的权威指南,对于任何希望深入了解Java多线程和并发控制机制的开发者来说,都是不可或缺的参考资料。这本书深入浅出地介绍了如何在Java环境中有效地管理和控制并发...

Global site tag (gtag.js) - Google Analytics