一、JUC概述
1、什么是JUC
Java的工具包-
2、线程和进程
简单比喻:进程是火车,线程是车厢
一个进程往往可以包含多个线程,至少包含一个线程
java默认有2个线程 :main线程 GC线程
对于java而言,开启线程的三种方式:Thread,Runnable,Callable
java不能真正的开启线程
- java开启线程是通过调用本地方法 底层的C++ 来完成的。
- java是执行在JVM上的,不能直接操作硬件。
3、并发,并行
- 并发(多线程同时操作一个资源)
- CPU 一核,模拟出来多条线程,添加武功,唯快不破,快速交替,抢占时间片
并行(多个人一起行走)
CPU多核,多个线程可以同时执行,线程池
public class Test {
public static void main(String[] args) {
// 获取CPU的荷属
// CPU 密集型 IO密集型
System.out.println(Runtime.getRuntime().availableProcessors());
}
}
4、多线程回顾
4.1 线程状态
线程有五个状态
public enum State {
// 新生
NEW,
// 运行
RUNNABLE,
// 阻塞
BLOCKED,
// 等待,死死的等
WAITING,
// 超时等待
TIMED_WAITING,
// 终止
TERMINATED;
}
4.2
wait()
/sleep()
区别① 来自不同的类
wait()
方法继承于Object基类sleep()
方法是Thread类的静态方法
② 关于锁的释放
wait()
会释放锁sleep()
不会释放锁
③ 使用的范围不同
wait()
必须使用在同步代码快中sleep()
可随处使用
5、Lock锁(重点)
传统的 Synchronized 锁
synchronized 本质就是队列