多线程&JUC

进程与线程

并发和并行
并发:在同一时刻有多个指令在单个CPU上交替执行
并行:在同一时刻有多个指令在多个CPU上同时执行

多线程的实现方式:

  1. 利用Thread类,自定义一个类继承Thread类,重写run方法
  2. 利用runable接口,自定义一个类实现runable接口,重写run方法
  3. 利用Callable接口和future接口方式实现 可以获得多线程运行的结果

三种方式的对比

常见的成员方法

守护线程:当其他的非守护线程结束之后,守护线程会陆续结束

礼让线程

插入线程

线程的生命周期

新建 就绪 运行 死亡 阻塞

安全问题来自:线程执行时具有随机性,cpu的执行权被其他线程抢走

同步代码块

把操作共享数据的代码锁起来 synchronized锁
锁默认打开,有一个线程进去了,锁自动关闭
立马的代码执行完毕,线程出来,锁自动打开

synchronized(唯一对象){} 注意:1.写在循环里面 2.锁对象需要是唯一的(字节码对象)

同步方法

把synchronized关键字直接加在方法上

特点:锁住方法里的所有代码;锁对象不能自己指定

lock锁

lock() unlock()

死锁

锁的嵌套容易导致死锁

生产者和消费者(等待唤醒机制)

也可以基于阻塞队列实现,生产者和消费者必须使用同一个阻塞队列,
ArrayBlockingQueue底层是数组,有界;LinkedBlockingQueue底层是链表,界是int最大值
ArrayBlockingQueue的take和put方法

线程的六种状态

线程池

创建无上限的线程池
创建有上限的线程池
获取线程池对象--提交任务(提交一次任务相当于开个一次线程)--销毁线程池

自定义线程池
七大参数
当核心线程分配完了并且队列中也排满了,再分配临时线程
如果还有其他策略,触发任务拒绝策略

posted @ 2025-07-14 20:48  huhulahu  阅读(4)  评论(0)    收藏  举报