写在开头
- JUC,java.util.concurrent,1.5后出现
- 进程和线程
- 进程,计算机中关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位
- 线程,操作系统进行运算调度的最小单元,是进程中的实际运作单位,一个进程包括多个线程
public enum State {
NEW,
RUNNABLE,
BLOCKED,
WAITING,
TIMED_WAITING,
TERMINATED;
}
- wait是
Object的方法,任何对象实例都可以调用;sleep是Thread的静态方法
- wait会释放锁,单调用它的前提是当前线程占有锁,代码要在
synchronized中;sleep不会释放锁,也不需要占用锁
- 都可以被
interrupted中断
- join方法,内部调用wait,阻塞主线程,直到该线程执行完毕,才会到主线程执行,但不影响其他线程执行
- 并发与并行
- 并发,同一时刻多个线程访问同一个资源,多个线程对一个点;春运抢票、电商秒杀
- 并行,多项工作一起执行,之后再汇总
Monitor 监视器,锁;是一种同步机制,保证同一个时间,只有一个线程能去被保护的数据/代码
- jvm同步基于基于和退出,使用管程对象进行实现,跟随java对像生命周期一样
- 只有持有管程对象,才能执行同步方法,执行完成后,才能释放管程对象
- 用户线程,一般的线程,自定义线程;守护线程,后台中执行的线程,如垃圾回收
- 主线程结束,用户线程运行,jvm仍然存活
- 没有用户线程,都是守护线程,主线程结束,jvm结束
Thread aa = new Thread(() -> {
System.out.println(Thread.currentThread().getName() + "::" + Thread.currentThread().isDaemon());
while (true) {
}
}, "aa");
aa.setDaemon(true);
aa.start();