当前位置:网站首页>深入了解JUC并发(一)什么是JUC
深入了解JUC并发(一)什么是JUC
2022-07-02 06:09:00 【我觉得海星_98】
基础知识
什么是JUC
JUC就是 java.util.concurrent 下面的类包,专门用于多线程的开发。
并发编程的优缺点
优点
充分利用多核CPU的计算能力
多核的CPU的背景下,催生了并发编程的趋势,通过并发编程的形式可以将多核CPU的计算能力发挥到极致,性能得到提升。
方便进行业务拆分,提升系统并发能力和性能
现在的系统动不动就要求百万级甚至千万级的并发量,而多线程并发编程正是开发高并发系统的基础,利用好多线程机制可以大大提高系统整体的并发能力以及性能。
缺点
频繁的上下文切换
任务从保存到再加载就是一次上下文切换,而每次切换时,需要保存当前的状态,以便能够进行恢复先前的状态,而这个切换时非常损耗性能,过于频繁反而无法发挥出多线程编程的优势
线程安全问题
多线程编程中最难以把握的就是临界区线程安全问题,稍微不注意就会出现死锁的情况,一旦产生死锁就会造成系统功能不可用
阻塞与非阻塞
阻塞与非阻塞的重点在于 线程等待消息时候的行为 ,也就是在等待消息的时候,当前线程是挂起状态,还是非挂起状态。
- 阻塞:调用在发出去后,在消息返回之前,当前线程会被挂起,直到有消息返回,当前线程才会被激活
- 非阻塞:调用在发出去后,不会阻塞当前线程,而会立即返回
同步与异步
- 同步:当一个同步调用发出去后,调用者要一直等待调用结果的返回后,才能进行后续的操作
- 异步:当一个异步调用发出去后,调用者不用管被调用方法是否完成,都会继续执行后面的代码。 异步调用,要想获得结果,一般有两种方式:
- 主动轮询异步调用的结果
- 被调用方通过callback来通知调用方调用结果
并发与并行
并发
线程轮流使用cpu的做法称为并发

并行
多个cpu下,每个核都可以调度运行线程,这时候线程可以是并行的
进程和线程
进程
进程就可以视为程序的一个实例。大部分程序可以同时运行多个实例进程(例如记事本、画图、浏览器等),也有的程序只能启动一个实例进程(例如网易云音乐、360安全卫士)等
线程
- 一个进程之内可以分为一到多个线程。一个线程就是一个指令流,将指令流中的一条条指令以一定的顺序交给CPU执行
- Java中,线程作为最小调度单位,进程作为资源分配的最小单位,在 windows中进程是不活动的,只是作为线程的容器
线程的状态
public enum State {
//运行
NEW,
//运行
RUNNABLE,
//阻塞
BLOCKED,
//等待
WAITING,
//超时等待
TIMED_WAITING,
//终止
TERMINATED;
}
- 线程创建之后它将处于NEW(新建)状态
- 调用start()方法后开始运行,并且在线程获得了 CPU 时间片(timeslice)后就处于RUNNING(运行)状态
- 当线程调用 同步方法 时,在没有获取到锁的情况下,线程将会进入到BLOCKED(阻塞)状态
- 当线程执行wait()方法之后,线程进入WAITING(等待)状态
- 在 等待状态 的基础上增加了超时限制,比如通过sleep(long millis)方法或wait(long millis)方法可以将线程置于等待超时(TIMED WAITING)状态
- 线程运行完将会进入到TERMINATED(终止)状态
边栏推荐
- Reading classic literature -- Suma++
- 锐捷EBGP 配置案例
- Deep learning classification network -- vggnet
- Lambda expressions and method references
- Redis Key-Value数据库 【秒杀】
- Verifying downloaded files using sha256 files
- memcached安装
- I/o impressions from readers | prize collection winners list
- Page printing plug-in print js
- Contest3145 - the 37th game of 2021 freshman individual training match_ H: Eat fish
猜你喜欢

MySQL transaction and isolation level

Detailed notes of ES6

How vite is compatible with lower version browsers

Sumo tutorial Hello World

Eco express micro engine system has supported one click deployment to cloud hosting

Lucene Basics

Zabbix Server trapper 命令注入漏洞 (CVE-2017-2824)

锐捷EBGP 配置案例

官方零基础入门 Jetpack Compose 的中文课程来啦!

Deep learning classification network -- alexnet
随机推荐
Comment utiliser mitmproxy
让每一位开发者皆可使用机器学习技术
Redis key value database [primary]
Deep learning classification network -- vggnet
Common websites for Postgraduates in data mining
From design delivery to development, easy and efficient!
图片裁剪插件cropper.js
加密压缩文件解密技巧
LeetCode 83. 删除排序链表中的重复元素
No subject alternative DNS name matching updates. jenkins. IO found, the reason for the error and how to solve it
Detailed notes of ES6
Shenji Bailian 3.53-kruskal
来自读者们的 I/O 观后感|有奖征集获奖名单
servlet的web.xml配置详解(3.0)
Picture clipping plug-in cropper js
外部中断无法进入,删代码再还原就好......记录这个想不到的bug
JWT tool class
Keepalived installation, use and quick start
Redis key value database [advanced]
Redis Key-Value数据库【初级】