JUC学习笔记

JUC是Java并发编程工具包,包括并发容器、锁机制等。文章介绍了上下文切换、线程状态、线程池原理、Java锁机制如Synchronized与Lock,以及Fork/Join框架等核心概念,旨在帮助开发者理解并优化多线程编程。
摘要由CSDN通过智能技术生成

JUC是什么

JUC是JAVA中java.util.concurrent包的简称.

这个包里面的东西就是Doug Lea写的,它主要包括atomic支持原子操作类相关代码,locksjava中锁相关代码,还有其他并发容器相关代码.

在jdk官方手册中可以看到juc相关的jar包有三个。用中文概括一下,JUC的意思就是java并发编程工具包。

上下文切换的概念

CPU通过时间片分配算法来循环执行任务,当前执行一个时间片后会切换到下一个任务。
但是,在切换前会保存上一个任务的状态,以便下次切换会这个任务时,可以再加载这个任务的状态。所以任务保存倒在加载就是一次上下文切换。

如何减少上下文切换

使用并发编程CAS算法使用最少线程和使用协程

无锁并发编程

多线程竞争锁时,会引起上下文切换,所以多线程处理数据,可以用一些办法来避免使用锁,如将数据的ID按照Hash算法取模分段,不同的线程处理不同段的数据。

CAS算法(乐观锁)

Java的Atomic包使用CAS算法来更新数据,而不需要加锁。

使用最少线程

避免创建不需要的线程,比如任务少,但是创建了很多线程来处理,这样就会造成大量线程都处于等待状态。

协程

在单线程里实现多任务的调度,并在单线程里维持多个任务间的切换。

进程/线程的概念

进程:

进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元

线程:

通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义。线程可以利用进程所拥有的资源,在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位而把线程作为独立运行和独立调度的基本单位,由于线程比进程更小基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统多个程序间并发执行的程度。

线程状态

在这里插入图片描述

线程的状态:

a.线程的状态
jps看线程的线程号
jstack看线程某个时刻的运行情况(线程的快照)
jvisualvm-对线程进行dump
b.线程调用sleep
进入Tim

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值