线程、进程等知识总结

进程和线程

  • 进程
    进程是一个程序的集合。比如运行中的QQ微信等,在运行时,就存在进程。

一个进程,可以包含多个线程。(一个进程至少包含一个线程。)

  • 线程
    在一个应用中,程序执行流的最小单元。

上面的说法过于抽象,举个栗子:

火车 == 进程
车厢 == 线程

火车和火车是不同的进程。
但是一列火车,可以包含多个车厢。

Java中有几个线程?

默认两个。
一个是主线程(如main()),一个是jvm的GC垃圾收集线程。

Java 可以开启线程?

无法开启。
new Thread().start();执行,在于源码中调用了start0();其是一个C++代码逻辑,并非是Java本身。
private native void start0();

并发和并行

  • 并发
    多线程操作同一个资源。比如:抢票。
  • 并行(CPU多核才有)
    线程和线程之间,可以同时进行。(两列并行的火车)

线程的状态

在java中的java.lang.Thread.State中,针对状态值做了以下定义:

public enum State {
    
    
        // 新生
        NEW,

        // 运行
        RUNNABLE,

        //阻塞
        BLOCKED,

        //等待(死等)
        WAITING,

        //超时等待(期限等待)
        TIMED_WAITING,

        // 终止、消亡
        TERMINATED;
    }

wait()、sleep()的区别

  • 来源于不同的类
    wait()来源于Object类,sleep()来源于线程类。
    在这里插入图片描述
    在这里插入图片描述
  • 关于锁的释放
    wait()会释放锁、sleep()不会释放
  • 使用范围不同
    wait():必须在同步代码块中使用。
    sleep():无范围限制。任何地方都可以。

TimeUnit.SECONDS.sleep(1);

  • 关于异常捕获
    sleep 需要捕获异常。
    在这里插入图片描述
    wait 也需要捕获异常。
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_38322527/article/details/114596095