1、什么是JUC?
全称是java.util .concurrent ,说白了就是多线程的意思
2、什么是进程?什么是线程?
进程:就是一个应用程序,比如微信、京东、淘宝等一系列的app或者exe就可以理解为一个进程
线程:是操作系统能够进行运算调度的最小单位,说人话就是可以理解为app里边各个功能点,比如淘宝app就是一个进程,那么淘宝的查看商品、下单、物流、评论等就是一个个的线程,这么多个功能(线程)组合起来的可以作为一个进程。
3、线程的状态?
NEW
(
新建
)、
RUNNABLE(准备就绪)、BLOCKED(阻塞)、WAITING(不见不散)、TIMED_WAITING
(过时不候)、TERMINATED
(
终结
)
4、
wait和sleep区别?
a、都是睡着的意思
b、
sleep 是 Thread 的静态方法,wait 是 Object 的方法,任何对象实例都
能调用。
c、sleep 不会释放锁,它也不需要占用锁。wait 会释放锁,但调用它的前提 是当前线程占有锁(即代码要在 synchronized 中)。
d、它们都可以被 interrupted 方法中断,有一个共同点,在哪睡的在哪醒。
5、并发与并行什么意思?
并发:多个线程同时访问一个资源,比如买火车票、电商秒杀等
并行:多个线程一起执行,最后统一汇总,比如组装变形金刚,你和小伙伴一起组装,你负责组装胳膊, 一个小伙伴负责组装腿 ,另一个小伙伴负责组装身子和头,最后你们都完成了之后再合并组装就是并行
6、管程是什么?
monitor(管程):
就是锁,是一种同步机制,保证同一个时间,只有一个线程能访问,大白话就是,你声明了一个str对象,str有一个管程对象,比如线程A拿到了str的管程对象,别的线程就不能拿到,等线程A退出释放str管程对象,其他线程才能拿到。
7、什么是用户线程和守护线程?
用户线程:就是自己定义的线程和常用的那些普通线程就是用户线程,主线程结束的情况下,用户线程还在运行,则jvm存活
守护线程:就是运行在后台的线程,可以理解为看不见的线程,只要代码运行他就会存在,主线程结束的情况下,没有在运行的用户线程,则jvm结束
用户线程特点验证:验证运行结果如下,因为线程A就是一个用户线程,主线程结束了,但用户线程有while循环,用户线程并未结束,所以jvm是存活状态
public class test {
public static void main(String[] args) {
Thread aa = new Thread(() -> {
System.out.print("A当前线程名称:" + Thread.currentThread().getName() + "--是否守护线程:"
+ Thread.currentThread().isDaemon());
while (true){
}
}, "aa");
aa.start();
System.out.println("结束了");
}
}
守护线程验证:如下图,当无用户线程情况下,jvm结束