JUC基础-C1-JUC概述&线程基础

本文介绍了Java并发编程的基础,包括JUC(java.util.concurrent)工具包,线程与进程的区别,线程的状态转换,wait和sleep方法的异同,以及并发与并行的概念。同时,讲解了管程(Monitor)的作用和用户线程与守护线程的特性。内容涵盖了线程的创建、同步与通信,有助于理解Java多线程的实现与管理。
摘要由CSDN通过智能技术生成

1 JUC概述&线程基础

1.1 什么是JUC

JUC即java.util.concurrent工具包的简称
这是一个处理线程的工具包,从JDK1.5开始出现

1.2 线程和进程基础

1.2.1 进程和线程

进程: 进程是程序的实体,进程是线程的容器
每打开一个应用(qq,word,chrome)即开启一个进程

线程: 是操作系统能够运算调度的最小单位,包含在进程中
是进程中的实际运作单位,一个线程指的就是进程中一个单一顺序的控制流
一个进程可以并发多个线程,每个线程执行不同的任务

在这里插入图片描述
打开QQ音乐即启动了一个进程,其中的各种功能模块推荐,电台等作为该进程中的线程工作

1.2.2 线程的状态

NEW: 初始状态,线程被创建,但还没有调用start()方法

RUNNABLE: 运行中状态,Java线程将就绪和运行统称为运行中
(Java中的线程没有就绪和运行状态,只有运行中RUNNABLE
因为线程执行的时间片太短,可能只有0.01s,为此没必要区分就绪和运行)

BLOCKED: 阻塞状态,表示线程阻塞于锁

WAITING: 线程进入等待,进入该状态的线程需要等待其它线程做出一些特定动作(通知/中断)

TIME_WAITING: 超时等待状态,不同于WAITING,可以在指定时间自行返回

TERMINATED: 终止状态,表示线程已执行完毕

在这里插入图片描述

1.2.3 wait和sleep异同

相同:
1,sleep()wait()都可以暂停线程的执行

2,都可以被interrupted()方法中断

相异:
1,sleep()Thread的静态方法,用于暂停线程一段时间
wait()Object的方法,用于线程间交互

2,sleep()不会释放锁,也不需要占用锁,时间到了自动唤醒线程
wait()会释放锁,但调用它的前提是当前线程占有了锁
需要被被的线程通过同一对象的notify()/notifyAll()唤醒

1.2.4 并发和并行

并发: 同一时刻多个线程访问同一个资源,多个线程对一个点
电商秒杀,春运抢票

并行: 多项任务一起执行,之后再汇总
一边听歌,一边看书

1.2.5 管程/Monitor

管程即Monitor监视器,就是锁
是一种同步机制,保证同一个时间,只有一个线程能访问被保护的数据或代码
JVM的同步基于进入和退出,使用管程对象(monitor)来实现

在这里插入图片描述

1.2.6 用户线程和守护线程

用户线程: 自定义完成任务的线程

守护线程: 后台的GC线程

主线程结束时,用户线程还在运行,此时JVM存活
没有运行的用户线程,都是守护线程,JVM结束

在这里插入图片描述

可以通过isDaemon()判断线程是否为守护线程
通过setDeameon(true)来将一个线程设置为守护线程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值