学习笔记:java多线程 JUC之一

什么是JUC

JUC是(Package java.util.concurrent)的缩写

concurrent:并发

在并发编程中使用的工具类

基本由三个工具类构成:java.util.concurrent 并发包,java.util.atomic 并发原子包,java.util.locks 并发锁包

什么是进程/线程/并发/并行

官方:

进程:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程即是基本的分配单元,也是基本的执行单元。

线程:通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义。线程可以利用进程所拥有的资源,在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位,由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统多个程序间并发执行的程度。

人话:进程跟操作系统有关系,一个程序就是一个进程

image-20201105111908836

并发是同一时间段内多个线程交替,并行是统一时间点多个线程同时执行。

wait/sleep

wait放开手去睡,放开手里的锁

sleep握紧手去睡,醒了手里还有锁

线程状态

新建 就绪 运行 阻塞 死亡

NEW 新建

RUNNABLE 就绪

BLOCKED 阻塞

WAITING 阻塞

TIMED_WAITING 等固定时间(过时不候)

TERMINATED 死亡

lambda表达式

接口中有且仅有一个方法,就可以用lambda表达式表示!

接口中有且仅有一个方法的接口,称为函数式接口!

函数时接口注解:@FunctionalInterface 底层会自动加上

口诀:拷贝小括号,写死右箭头,落地大括号

java8 后允许接口内实现方法default

 Obiect object=()->{System.out.println("hello");};
 Obiect object=(x,y)->{System.out.println("hello");return x+y;};