什么是JUC?
java.util工具包
业务:普通的线程代码 Thread
Runnable 没有返回值,效率相比于Callable相对较低
线程和进程
进程: 一个程序,如QQ.exe等,程序的集合
一个进程往往可以包含多个线程,至少包含一个
线程: 一个进程中的一些功能是通过线程来实现的
注意:
- java默认有几个线程? 2个,一个main线程,一个GC线程;
- java真的可以开启线程吗? 不可以,Thread的start方法调用了本地方法
private native void start0();
,调用底层的C++,java无法直接操作硬件
并发和并行
并发: 多线程操作同一个资源
- cpu一核,模拟出来多条线程,快速交替执行
并行: 多线程操作多个资源
- cpu多核,多个线程可以同时执行
并发编程的本质:充分利用cpu的资源
线程有几个状态
- NEW 新生
- RUNNABLE 运行
- BLOCKED 阻塞
- WAITING 等待
- TIMED_WAITING 超时等待(过期不候)
- TERMINATED 终止
wait / sleep区别
区别:
- 来自不同的类,wait-Object;sleep-Thread
- 关于锁的释放,wait会释放锁;sleep不会释放锁
- 使用的范围不同,wait必须在同步代码块中使用;sleep可以在任何地方使用
- 是否需要捕获异常,wait不需要捕获;sleep必须捕获异常