天天看点

Java并发——1.JUC基础知识1.1 什么是JUC1.2 进程与线程1.3 线程状态1.3.21.4 并发与并行的区别1.5管程1.6用户线程核守护线程

1.1 什么是JUC

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

1.2 进程与线程

通俗解释:

进程是一个应用程序,比如我们打开一个酷狗音乐,就是打开了一个进程。

然后酷狗音乐里可以听歌,可以评论,可以看视频,这些就是不同的线程。

官方解释:

进程:

指在系统中正在运行的一个应用程序;程序一旦运行就是进程;进程——资源分配的最小单位。

线程:

系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个

单元执行流。线程——程序执行的最小单位。

(java默认两个线程,main线程和GC垃圾回收线程)

1.3 线程状态

  • NEW,(新建)
  • RUNNABLE,(准备就绪)
  • BLOCKED,(阻塞)
  • WAITING,(不见不散)
  • TIMED_WAITING,(过时不候)

区分waiting和time_waiting

waiting

是忠贞的爱情,一方没来,另一方守身如玉。等,一直等,等到死了还在等。

time_waiting

是我就等你一周,你爱来不来,你一周内不来我就走了。

1.3.2

重点:wait/sleep的区别

1.来着不同的类

-wait来着Object类

-sleep来着Thread类

2.锁的释放不同

-wait会释放锁

-sleep不会释放锁

3.使用范围不同

-wait必须在同步代码块

-sleep可以在任何地方睡

1.4 并发与并行的区别

并发:

反正记住一句话,我们学的就是并发编程。

并发编程的核心就是同一时刻多个线程访问同一个资源

(不过注意,这里多线程是因为线程快速交造成同时的错觉,本质上任是单核的)

并行

并行是多核操作,多个线程同时执行。

可以看作多项工作一起执行,之后再汇总

并行是针对于串行来着的:

串行模式

串行表示所有任务都一一按先后顺序进行。串行意味着必须先装完一车柴才能

运送这车柴,只有运送到了,才能卸下这车柴,并且只有完成了这整个三个步

骤,才能进行下一个步骤。

串行是一次只能取得一个任务,并执行这个任务。

并行模式

并行意味着可以同时取得多个任务,并同时去执行所取得的这些任务。并行模

式相当于将长长的一条队列,划分成了多条短队列,所以并行缩短了任务队列

的长度。并行的效率从代码层次上强依赖于多进程/多线程代码,从硬件角度上

则依赖于多核 CPU。

1.5管程

管程(monitor)是保证了同一时刻只有一个进程在管程内活动,即管程内定义的操作在同一时刻只被一个进程调用(由编译器实现).但是这样并不能保证进程以设计的顺序执行。

JVM 中同步是基于进入和退出管程(monitor)对象实现的,每个对象都会有一个管程

(monitor)对象,管程(monitor)会随着 java 对象一同创建和销毁。

执行线程首先要持有管程对象,然后才能执行方法,当方法完成之后会释放管程,方法在执行时候会持有管程,其他线程无法再获取同一个管程。

1.6用户线程核守护线程

用户线程:平时用到的普通线程,自定义线程

守护线程:运行在后台,是一种特殊的线程,比如垃圾回收

当主线程结束后,用户线程还在运行,JVM 存活

如果没有用户线程,都是守护线程,JVM 结束