多线程&JUC
进程与线程
并发和并行
并发:在同一时刻有多个指令在单个CPU上交替执行
并行:在同一时刻有多个指令在多个CPU上同时执行
多线程的实现方式:
- 利用Thread类,自定义一个类继承Thread类,重写run方法
- 利用runable接口,自定义一个类实现runable接口,重写run方法
- 利用Callable接口和future接口方式实现 可以获得多线程运行的结果
三种方式的对比
常见的成员方法
守护线程:当其他的非守护线程结束之后,守护线程会陆续结束
礼让线程
插入线程
线程的生命周期
新建 就绪 运行 死亡 阻塞

安全问题来自:线程执行时具有随机性,cpu的执行权被其他线程抢走
同步代码块
把操作共享数据的代码锁起来 synchronized锁
锁默认打开,有一个线程进去了,锁自动关闭
立马的代码执行完毕,线程出来,锁自动打开
synchronized(唯一对象){} 注意:1.写在循环里面 2.锁对象需要是唯一的(字节码对象)
同步方法
把synchronized关键字直接加在方法上
特点:锁住方法里的所有代码;锁对象不能自己指定
lock锁
lock() unlock()
死锁
锁的嵌套容易导致死锁
生产者和消费者(等待唤醒机制)
也可以基于阻塞队列实现,生产者和消费者必须使用同一个阻塞队列,
ArrayBlockingQueue底层是数组,有界;LinkedBlockingQueue底层是链表,界是int最大值
ArrayBlockingQueue的take和put方法
线程的六种状态
线程池
创建无上限的线程池
创建有上限的线程池
获取线程池对象--提交任务(提交一次任务相当于开个一次线程)--销毁线程池
自定义线程池
七大参数
当核心线程分配完了并且队列中也排满了,再分配临时线程
如果还有其他策略,触发任务拒绝策略

浙公网安备 33010602011771号