深入了解JUC并发(一)什么是JUC

基础知识

什么是JUC

JUC就是 java.util.concurrent 下面的类包,专门用于多线程的开发。

并发编程的优缺点

优点
  1. 充分利用多核CPU的计算能力

    多核的CPU的背景下,催生了并发编程的趋势,通过并发编程的形式可以将多核CPU的计算能力发挥到极致,性能得到提升。

  2. 方便进行业务拆分,提升系统并发能力和性能

    现在的系统动不动就要求百万级甚至千万级的并发量,而多线程并发编程正是开发高并发系统的基础,利用好多线程机制可以大大提高系统整体的并发能力以及性能。

缺点
  1. 频繁的上下文切换

    任务从保存到再加载就是一次上下文切换,而每次切换时,需要保存当前的状态,以便能够进行恢复先前的状态,而这个切换时非常损耗性能,过于频繁反而无法发挥出多线程编程的优势

  2. 线程安全问题

    多线程编程中最难以把握的就是临界区线程安全问题,稍微不注意就会出现死锁的情况,一旦产生死锁就会造成系统功能不可用

阻塞与非阻塞

阻塞与非阻塞的重点在于 线程等待消息时候的行为 ,也就是在等待消息的时候,当前线程是挂起状态,还是非挂起状态。

  • 阻塞:调用在发出去后,在消息返回之前,当前线程会被挂起,直到有消息返回,当前线程才会被激活
  • 非阻塞:调用在发出去后,不会阻塞当前线程,而会立即返回

同步与异步

  • 同步:当一个同步调用发出去后,调用者要一直等待调用结果的返回后,才能进行后续的操作
  • 异步:当一个异步调用发出去后,调用者不用管被调用方法是否完成,都会继续执行后面的代码。 异步调用,要想获得结果,一般有两种方式:
    1. 主动轮询异步调用的结果
    2. 被调用方通过callback来通知调用方调用结果

并发与并行

并发

线程轮流使用cpu的做法称为并发

在这里插入图片描述

并行

多个cpu下,每个核都可以调度运行线程,这时候线程可以是并行的

进程和线程

进程

进程就可以视为程序的一个实例。大部分程序可以同时运行多个实例进程(例如记事本、画图、浏览器等),也有的程序只能启动一个实例进程(例如网易云音乐、360安全卫士)等

线程
  1. 一个进程之内可以分为一到多个线程。一个线程就是一个指令流,将指令流中的一条条指令以一定的顺序交给CPU执行
  2. Java中,线程作为最小调度单位,进程作为资源分配的最小单位,在 windows中进程是不活动的,只是作为线程的容器

线程的状态

public enum State {
	//运行
    NEW,

	//运行
    RUNNABLE,

	//阻塞
    BLOCKED,

	//等待
    WAITING,

	//超时等待
    TIMED_WAITING,

	//终止
    TERMINATED;
}
  1. 线程创建之后它将处于NEW(新建)状态
  2. 调用start()方法后开始运行,并且在线程获得了 CPU 时间片(timeslice)后就处于RUNNING(运行)状态
  3. 当线程调用 同步方法 时,在没有获取到锁的情况下,线程将会进入到BLOCKED(阻塞)状态
  4. 当线程执行wait()方法之后,线程进入WAITING(等待)状态
  5. 在 等待状态 的基础上增加了超时限制,比如通过sleep(long millis)方法或wait(long millis)方法可以将线程置于等待超时(TIMED WAITING)状态
  6. 线程运行完将会进入到TERMINATED(终止)状态
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值