JUC概述

JUC概述:

在这里插入图片描述

线程和进程的概念:

在这里插入图片描述

在这里插入图片描述

总结:
在这里插入图片描述

线程的几个状态:

NEW:新建
RUNNABLE:准备就绪
BLOCKED:阻塞
WAITING:不见不散
TIMED_WAITING:过时不候
TERMINATED:终结

两个方法wait方法和sleep方法
在这里插入图片描述

1.相同点:

(1)一旦执行方法,都可以使当前线程进入阻塞状态

2.不同点:

(1)sleep()方法是Thread类中的静态方法;而wait()方法是Object类中的方法;

(2)sleep()方法可以在任何地方调用;而wait()方法只能在同步代码块或同步方法中使用(即使用synchronized关键字修饰的);

(3)这两个方法都在同步代码块或同步方法中使用时,sleep()方法不会释放同步监视器;而wait()方法则会释放同步监视器;

①.(最重要区别)sleep() 方法没有释放锁,而 wait() 方法释放了锁;②.wait()通常被用于线程间交互/通信,sleep() 通常被用于暂停执行 ; ③. wait() 方法被调用后,线程不会自动苏醒,需要别的线程调用同一个对象上的notify() 或者 notifyAll()​​​​​​​ 方法。sleep() 方法执行完成后,线程会自动苏醒。或者可以使用 wait(long timeout) 超时后线程会自动苏醒。

并发和并行:

在这里插入图片描述

形象理解并发和并行:
并发相当于闪电侠(相当于一个cpu),并行相当于鸣人的影分身(多个cpu,或者多核cpu),他们两个人都同时 画两幅画,闪电侠快速在两幅画之间切换着画,而鸣人直接开启影分身 同时分别 在两幅画上作画。

并发:在一个时间段内发生若干事件;单核cpu同时执行多个任务时,时间片进行很快的切换,线程轮流执行cpu。比如一个人一个时间段内做不同的事。

并行:在同一时刻发生若干事件;多核cpu同时执行多个任务。比如,高速公路8车道同时通过好几辆车,秒杀。

做一个形象的比喻:

并发 = 两个队列和一台咖啡机。

并行 = 两个队列和两台咖啡机。

串行 = 一个队列和一台咖啡机。

管程:

在这里插入图片描述

那么什么是管程呢?
见名知意,是指管理共享变量以及对共享变量操作的过程,让它们支持并发。翻译成Java领域的语言,就是管理类的状态变量,让这个类是线程安全的。

synchronized关键字和wait()、notify()、notifyAll()这三个方法是Java中实现管程技术的组成部分。记得学习操作系统时,在线程一块还有信号量机制,管程在功能上和信号量及PV操作类似,属于一种进程同步互斥工具。Java选择管程来实现并发主要还是因为实现管程比较容易。

管程对应的英文是Monitor,直译为“监视器”,而操作系统领域一般翻译为“管程”。

用户线程和守护线程:

用户线程
定义:平时用到的普通线程均是用户线程,当在Java程序中创建一个线程,它就被称为用户线程

守护线程
定义:是个服务线程,准确地来说就是服务其他的线程,这是它的作用——而其他的线程只有一种,那就是用户线程。
所以java里线程分2种,
1、守护线程,比如垃圾回收线程,就是最典型的守护线程。
2、用户线程,就是应用程序里的自定义线程

java线程分类:
在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程)

用户线程和守护线程的区别
二者其实基本上是一样的。唯一的区别在于JVM何时离开。

用户线程:当存在任何一个用户线程未离开,JVM是不会离开的。

守护线程:如果只剩下守护线程未离开,JVM是可以离开的。

在Java中,制作守护线程非常简单,直接利用.setDaemon(true)

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值