`

Java多线程高并发基础篇(一)-必须知道的基础概念

 
阅读更多

对于多线程高并发,我们必须要知道这里面涉及的基本概念,就像学武功一样,在学习成套招式的时候,你必须要学会扎稳马步.

我们先介绍多线程高并发中必须知道的几个概念.

1.同步和异步

同步和异步,通常用来形容一次请求调用.我们在做前端开发中经常涉及,例如ajax的同步异步请求.那什么是同步和异步?

同步是指请求调用一旦开始就必须等待这个请求处理完成,才能进行后续的行为.比如说,小明有个生活习惯,每天都是吃饭睡觉打豆豆.在睡觉之前必须吃饭,在打豆豆之前必须睡好觉.

那什么是异步呢?异步就是请求发起后,我们不需要等待它完成,而真实的请求会由另外一个线程去执行.如果异步请求需要返回结果,那么当异步请求调用完成后,它才会通知调用者真实的结果.

有个很经典的例子,是老王烧水的故事.(我突然想起了我们的同事老司机)

老司机是个爱学习的员工.有一天,老王要烧水.他灌好水,放在火炉上,因为不知道什么时候水会开,所以老司机必须一直盯着水壶的水(老司机你是不是傻?),然后水开后就去学习了.这就是同步的例子,灌水-->等待水开-->学习.

突然一天,老司机发现自己太傻了,于是老司机买了一个响水壶,水烧开后,他会自己"滴滴滴"的响.于是流程变成了这样子,老司机灌好水,放在炉子上,然后就去学习了.当水开了,水壶就响了,老司机就知道水开了.这就是异步的例子.

2.并发和并行

并发和并行,在面试中常问.

如果接触过操作系统这门课,我们应该知道,在计算机中,同时执行多个任务,在操作系统中是分时间片执行的,但是这个细节对外是透明的.所以,我们的计算机才能看起来同时执行多个任务.

严格意义上讲,并行是真实的多个任务在同时执行,这得益于我们科技的发展,因为我们的电脑基本都是多核的(多个处理器).因此能够真正意义上实现任务并行执行.

如果系统中只有一个核心(单CPU),任务就是并发执行的.因为只有一个处理器,大家只能根据分配到的时间片去执行自己的任务,所以我们觉得以前的电脑真是卡的不要不要的.

3.临界区

在多线程中,临界区是指多个线程要同时访问的公共资源或者共享数据.但是这个区域在一个时刻只能由一个线程使用,一旦有线程获取到,那么其他线程就必须等待了.

4.阻塞和非阻塞

阻塞和非阻塞通常是用来形容多个线程之间的相互影响的.比如一个线程占用了临界区,那么其他线程就不得不等待,也就是说其他线程被阻塞了,这就是阻塞的情况.非阻塞的情况与阻塞相反,就是多个线程可以同时进入,你不阻挡我,我不阻挡你.

5.死锁,饥饿,活锁

死锁,饥饿,活锁是多线程的跃性问题.

死锁(Deadlock)是最坏的一种情况,因为没有一个线程能继续执行.比如四辆车头顶头形成了环.现在明白交通信号灯的用处了吧.

饥饿(Stavation),是指一个或者多个线程因为某些原因一直得不到所需要的执行资源(CPU资源),导致一直没法执行,在非公平锁的情况下会出现饥饿现象.比如,我们在吃饭的时候,你跟服务员点了菜,比你先来的人都吃上了,你还没吃上,你不饿还有谁饿.哈哈,所以,后来才有了叫号机(请xx号取餐,多么熟悉的声音).

 

活锁(Livelock),是指线程秉承着谦虚礼让的原则,只要别的线程要使用资源,它就主动将资源释放给人家使用.如果两个线程都很礼让,都主动让资源,就会形成活锁的情况(这线程是不是傻?).比如,走路时候,你跟一个人迎头碰上了,两人都互相让路,然后一直没走下去.[捂脸]


 

  • 大小: 53.2 KB
分享到:
评论

相关推荐

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

    - **JMM**:Java内存模型定义了线程如何访问和更新共享变量,以及如何确保多线程环境下的可见性和一致性。JMM通过内存屏障和volatile、synchronized关键字来保证并发编程的安全性。 5. **并发的优势与风险** - **...

    java多线程、并发及线程池介绍收藏的几篇文档

    Java多线程、并发以及线程池是Java编程中至关重要的概念,特别是在处理高并发、高性能的系统设计时。以下是对这些主题的详细说明: 1. **Java 程序中的多线程** - 多线程允许一个程序同时执行多个任务,提高程序...

    深入Java多线程和并发编程

    本篇文章将围绕Java多线程与并发编程的核心概念和技术进行深入探讨,帮助读者建立系统的知识体系,并掌握相关的实践方法。 #### 背景介绍 随着互联网应用规模的不断扩大,现代应用面临着高并发请求、CPU密集型操作...

    JAVAJAVA多线程教学演示系统论文

    总的来说,《JAVA多线程教学演示系统》这篇论文不仅是对JAVA多线程技术的理论探讨,更是一个实践与教学相结合的优秀范例,对于提升学生的多线程编程能力具有很高的参考价值。VB图书管理系统论文范文虽不在本文讨论...

    深入浅出Java多线程.pdf

    本PDF文档涉及了Java多线程的全面介绍,分为基础篇、原理篇和JDK工具篇三个部分,旨在帮助读者深入了解Java多线程的概念、原理及实践应用。 #### 基础篇 **1. 进程与线程基本概念** - **进程**:是程序的一次执行...

    Java多线程编程实战指南核新篇&设计篇&以及和核新篇的案例代码

    核心篇主要讲解了Java多线程的基础概念,包括线程的创建与启动、线程同步机制如synchronized关键字、wait()、notify()和notifyAll()方法、线程间通信的并发工具类如Semaphore、CyclicBarrier、CountDownLatch等。...

    Java多线程编程实战指南 设计模式篇.rar

    Java多线程编程与设计模式的结合,能够帮助开发者构建高性能、高可用性的并发应用。理解并熟练掌握这些知识点,是每个Java程序员进阶的必经之路。通过阅读"Java多线程编程实战指南 设计模式篇.pdf",你将获得更深入...

    Java多线程之基础篇(二).docx

    Java 多线程是Java语言中的一个重要特性,...总的来说,Java多线程编程涉及许多概念和机制,包括线程创建、同步、通信、异常处理等。理解和熟练掌握这些知识点是开发高并发应用的基础,也是提升Java程序员技能的关键。

    JAVA多线程总结

    本篇总结涵盖了Java多线程的基础概念、创建与启动、线程调度、同步与协作以及新特性。 **一、Java线程:概念与原理** 1. **线程与进程**: - **进程**:是操作系统资源分配的基本单位,每个进程都有独立的内存...

    JAVA程序员必读--基础篇chm

    10. **多线程**:Java内置了对多线程的支持,通过实现Runnable接口或继承Thread类,可以创建并发执行的任务,提高程序的效率。 11. **反射**:反射机制允许在运行时动态地获取类的信息并创建或操作对象,是Java的...

    Java技术教程--基础篇

    本教程“Java技术教程--基础篇”旨在为初学者提供一个全面的Java学习平台,帮助他们掌握Java编程的基础概念和技能。教程内容涵盖Java的核心特性,包括图形用户界面(GUI)、线程管理和网络通信。 首先,我们来深入...

    Java-jdk10-最新最全多线程编程实战指南-核心篇

    通过阅读《Java-jdk10-最新最全多线程编程实战指南-核心篇》这本书,开发者不仅可以理解Java多线程编程的基础知识,还能掌握高级并发编程技巧,从而在实际项目中实现高性能、高并发的程序设计。对于Java开发者来说,...

    Java语言程序设计-基础篇(原书第8版).pdf

    根据提供的文件信息,“Java语言程序设计-基础篇(原书第8版)”这本书主要面向初学者,旨在通过详细的讲解和示例帮助读者掌握Java编程的基础知识。以下是对该书籍可能涉及的一些关键知识点进行的总结: ### 1. Java...

    多线程编程实战指南-核心篇

    总之,《多线程编程实战指南-核心篇》是一本全面解析Java多线程编程的书籍,通过学习,开发者不仅可以掌握多线程编程的基本原理,还能学会如何在实际项目中应用这些知识,提升程序的并发性能和稳定性。对于有一定...

    多线程两种实现方式Java

    你可以通过运行这些示例来更好地理解和学习Java多线程的概念。例如,它可能包含一个继承`Thread`的类,一个实现`Runnable`的类,以及演示如何启动和管理这些线程的主程序。 总结,理解并熟练掌握Java中的多线程实现...

    Java语言程序设计-基础篇(原书第8版)原书代码_资料

    9. **多线程**:Java内置对多线程的支持,通过实现Runnable接口或继承Thread类,可以创建并运行多个线程,实现并发执行。 10. **网络编程**:Java提供了Socket和ServerSocket类进行网络通信,是构建网络应用的基础...

    Java语言程序设计 基础篇 第八版 带目录

    根据提供的信息,“Java语言程序设计 基础篇 第八版 带目录”这本书主要针对初学者介绍了Java编程的基础知识。尽管提供的具体内容部分只包含了下载链接,我们仍然可以根据书名、描述以及标签来推断出书中可能涵盖的...

    java语言程序设计基础篇(原书第十版)

    《Java语言程序设计基础篇(原书第十版)》是一本深入浅出的Java编程教程,适合初学者和有一定经验的开发者。这本书以其详尽的内容和实用的代码示例深受读者喜爱,尤其对于想要深入了解Java编程的人来说,是一份...

Global site tag (gtag.js) - Google Analytics