并发编程概述

简介: 并发编程概述

JVM线程模型

jvm线程与操作系统线程之间存在某种映射关系,这两种不同维度的线程之间的规范和协议就是线程模型

三种线程模型:

1对1:java线程与操作系统线程1对1关系

多对1:多个用户线程映射到一个内核线程上,用户线程调度需要用户空间完成

多对多:多个用户线程映射到多个内核线程上。

乐观锁与悲观锁

并发环境中,出现多个线程对统一资源进行争抢的情况,两个线程同时对资源进行修改,会导致数据不一致的情况,为了解决这个问题,使用锁机制

乐观锁:乐观锁总是假设最好的情况,认为共享资源每次被访问的时候不会出现问题,线程可以不停地执行,无需加锁也无需等待,只是在提交修改的时候去验证对应的资源(也就是数据)是否被其它线程修改了(具体方法可以使用版本号机制或 CAS 算法)

悲观锁:悲观锁有点像是一位比较悲观(也可以说是未雨绸缪)的人,总是会假设最坏的情况,避免出现问题 (认为共享资源每次被访问的时候就会出现问题(比如共享数据被修改),所以每次在获取资源操作的时候都会上锁,这样其他线程想拿到这个资源就会阻塞直到锁被上一个持有者释放。也就是说,共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程。)

对象锁:四种状态

无锁、偏向锁、轻量级锁、重量级锁

JUC

JUC中大量组件以及一些开源中间件都依赖AQS

Reentrantlock:可重入锁

countDownLatch:线程计数器

threadPoolExcutor:线程池

concurrentHashMap:哈希表

相关文章
|
2月前
|
安全 Java 调度
Java并发编程:从基础到实战
【7月更文挑战第3天】在Java的世界中,并发编程是一块充满挑战与机遇的领域。本文将带领读者从理解并发编程的基本概念开始,逐步深入到Java并发工具的使用和高级技巧的应用。我们将一起探索如何在多线程环境下保证数据的一致性和程序的正确性,以及如何通过高效的并发策略来提升应用性能。准备好,让我们开启Java并发编程的旅程,掌握让应用飞一般运行的秘密。
37 1
|
3月前
|
Java 调度
|
4月前
|
Java 开发者
深入理解Java并发编程:从基础到高级
【5月更文挑战第13天】本文将深入探讨Java并发编程的各个方面,从基础知识到高级概念。我们将首先介绍线程的基本概念,然后深入讨论Java中的多线程编程,包括线程的创建和控制,以及线程间的通信。接下来,我们将探讨并发编程中的关键问题,如同步、死锁和资源竞争,并展示如何使用Java的内置工具来解决这些问题。最后,我们将讨论更高级的并发编程主题,如Fork/Join框架、并发集合和并行流。无论你是Java新手还是有经验的开发者,这篇文章都将帮助你更好地理解和掌握Java并发编程。
|
4月前
|
Java 容器
Java并发编程中的一些基本概念
Java并发编程中的一些基本概念
40 0
|
存储 缓存 算法
并发编程基础
并发编程基础
|
算法 Java 测试技术
【JUC基础】17. 并发编程常见问题
多线程固然可以提升系统的吞吐量,也可以最大化利用系统资源,提升相应速度。但同时也提高了编程的复杂性,也提升了程序调试的门槛。今天就来汇总一些常见的并发编程中的问题。
669 2
|
存储 缓存 资源调度
多线程的概述
多线程的概述
JUC并发编程学习1:JUC概述、进程线程概述
JUC就是工具类,java.util.concurent的缩写。用来开发并发编程的工具包。 JUC是一个处理线程的工具包,JDK1.5开始出现的。
JUC并发编程学习1:JUC概述、进程线程概述
|
安全 算法 Java
Java并发编程系列之三JUC概述
上篇文章为解决多线程中出现的同步问题引入了锁的概念,上篇文章介绍的是Synchronized关键字锁,本篇文章介绍更加轻量级的锁Lock接口及引出JUC的相关知识。
Java并发编程系列之三JUC概述
|
存储 Java 调度
Java多线程简介
Java多线程
113 0
Java多线程简介