一、什么是JUC
- java.util包下面三个子包concurrent、concurrent.atomic、locks
二、线程和进程
- 进程:一个程序,是程序的集合,如:QQ.exe、Music.exe
- 一个进程往往可以包含多个线程,至少包含一个
- Java默认有2个线程:main线程和GC线程
- 对于Java而言,有三种方式创建线程:Thread、Runnable、Callable
- Java真的能开启线程吗?开启不了的!
三、并发和并行
- 并发(多线程操作同一个资源):CPU单核,模拟出来多条线程,快速交替
- 并行(多个人一起行走):CPU多核,多个线程可以同时执行;可以使用线程池,以达到最大性能
- Java代码获取CPU核数
Runtime.getRuntime().availableProcessors()
- 并发编程的本质:在现有的基础上,充分利用CPU的资源!
四、线程状态
- Thread.State枚举类中定义了线程的6种状态
public enum State { // 新建or新生 NEW, // 运行 RUNNABLE, // 阻塞 BLOCKED, // 等待(死死的等) WAITING, // 超时等待(过期不候) TIMED_WAITING, // 终止 TERMINATED; }
五、wait()方法和sleep()方法区别
- 来自不同的类
① wait()方法来自于Object类
② sleep()方法来自于Thread类
③ 企业开发中,一般不使用sleep()方法,而更多的会使用TimeUnit.SECONDS.sleep(long timeout)方法来休眠线程 - 关于锁的释放
① wait()方法会释放锁
② sleep()方法不会释放锁(抱着锁睡觉!) - 使用范围不同
① wait()方法必须使用在同步代码块中
② sleep()方法可以在程序的任何地方使用