`
lantian_123
  • 浏览: 1368529 次
  • 性别: 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中,每个线程可以分配到一个独立的处理器核上,真正实现并行执行。 ...

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

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

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

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

    Java 并发编程实战.pdf

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

    java并发编程2

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

    01-并发编程之深入理解JMM&并发三大特性(一).pdf

    并行是并发的一种特殊情况,或者说,并发是并行的一个更为广泛的术语。 并发编程中的三大特性:可见性、有序性和原子性,是多线程编程中主要的并发问题来源。这些特性是理解和规避并发编程中Bug的关键。 可见性...

    ORACLE最大并发数查询

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

    java并发编程艺术

    并发编程是现代多核处理器环境下提升软件性能的关键手段,而Java语言提供了丰富的工具和API来支持这一领域。本书旨在帮助开发者理解和掌握如何在Java应用程序中有效地实现并行处理。 并发编程的核心概念包括线程、...

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

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

    CsGo并发流程控制框架

    一、并发控制基础 并发控制是指在多任务或多线程环境下,如何协调和管理各个任务或线程的执行顺序和资源分配,以确保程序的正确性和高效性。在C#中,主要借助.NET Framework提供的线程类库实现并发控制,如Thread、...

    高并发解决方案

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

    C++并发编程实践 C++ Concurrency in Action

    - **最佳实践**:分享了一些关于并发编程的最佳实践和技巧。 #### 九、高级线程管理 第九章涉及了一些更复杂的线程管理主题,如线程池、线程优先级调整等。 - **线程池**:介绍了如何使用线程池来管理和复用线程...

Global site tag (gtag.js) - Google Analytics