一、JUC概述

1、什么是JUC

Java的工具包-

image.png

2、线程和进程

简单比喻:进程是火车,线程是车厢
一个进程往往可以包含多个线程,至少包含一个线程

java默认有2个线程 :main线程 GC线程

对于java而言,开启线程的三种方式:Thread,Runnable,Callable

java不能真正的开启线程

  • java开启线程是通过调用本地方法 底层的C++ 来完成的。
  • java是执行在JVM上的,不能直接操作硬件。

3、并发,并行

  • 并发(多线程同时操作一个资源)
    • CPU 一核,模拟出来多条线程,添加武功,唯快不破,快速交替,抢占时间片
  • 并行(多个人一起行走)

    • CPU多核,多个线程可以同时执行,线程池

      1. public class Test {
      2. public static void main(String[] args) {
      3. // 获取CPU的荷属
      4. // CPU 密集型 IO密集型
      5. System.out.println(Runtime.getRuntime().availableProcessors());
      6. }
      7. }

      4、多线程回顾

      4.1 线程状态

      线程有五个状态

      1. public enum State {
      2. // 新生
      3. NEW,
      4. // 运行
      5. RUNNABLE,
      6. // 阻塞
      7. BLOCKED,
      8. // 等待,死死的等
      9. WAITING,
      10. // 超时等待
      11. TIMED_WAITING,
      12. // 终止
      13. TERMINATED;
      14. }

      4.2 wait()/sleep()区别

      ① 来自不同的类

  • wait()方法继承于Object基类

  • sleep()方法是Thread类的静态方法

② 关于锁的释放

  • wait() 会释放锁
  • sleep() 不会释放锁

③ 使用的范围不同

  • wait()必须使用在同步代码快中
  • sleep() 可随处使用

5、Lock锁(重点)

传统的 Synchronized 锁

synchronized 本质就是队列