【Kilav】 JAVA知识点速通 多线程

发布于:2022-12-25 ⋅ 阅读:(300) ⋅ 点赞:(0)

1.程序 进程 线程 基本概念

    • 同一个程序可以有多个进程
    •   进程里有多个线程
    • 一个程序是一个进程 里面有一些默认的线程
    • main(用户线程)
    •  jc(守护线程) JVM分配的
    • 线程和其它同属于一个进程的线程公用一个存储空间,而进程之间空间独立
    • 多处理机才能真正实现多线程 单处理机只在交替执行
    • 每个线程都有自己的栈和程序计数器
    • JVM有两种执行多线程的方法
      • 一种是调用操作系统
      • 一种是在自身环境中调用

2.线程创建

    • Thread类  
      • 自定义一个类继承Thread
      • 需要重写run方法
      • 调用start()方法
      • 用run方法会提前执行
      • 不要调用run方法 用start方法
      • 用start方法会交替执行

      • 一个类只能继承一个父类,这是此方法的局限。
    • Runnable接口
      • 写一个类继承Runnab接口
      • 重写run函数
      • 主函数里实例化一个这个类的对象 a
      • 实例化一个Thread的对象b  把a丢到b里

    • Callable  只做了解

3.线程优先级

    • 其优先级范围MIN_PRIORITY(常量1)到MAX_PRIORITY(常量10)默认情况下,线程优先级是NORM_PRIORITY(常量5)
    • 每个线程的优先级都是从创建它的进程那里继承下来的。
    • 但是线程的优先级无法确切保证线程的执行顺序,
    • set priority
    • get priority
  • 后台线程和用户线程
  • 静态代理模式
    • 好处
      • 代理对象可以做很多真实对象做不了的事
      • 真实对象专注做自己的事情
    • 代理对象真实对象都实现一个接口
    • 代理对象的方法里创建一个真实角色  然后调用该方法
    • 代理对象是Thread
    • 真实对象说Runna接口
  • 线程池
    • 先创建好多个线程,用完放回去,不用反复创建销毁
  • 线程状态
    • 创建状态  new
    • 就绪状态  start  yield
    • 阻塞状态  sleep wait
    • 运行状态  可以到阻塞或者到死亡  join可以直接插队
    • 死亡状态
    • sleep
      • 会抛出InterruptedException
      • sleep不释放锁
      • 模拟网络延迟
    • yield
      • 暂停 单不阻塞
      • 礼让不一定成功
      • 进入就绪状态
  • 线程同步
    • 多个线程访问同一个对象 并且想篡改这个对象
    • 那么把这些对象都丢到同一个等待池里
    • 队列+锁
    • 解决线程并发问题