线程基础知识

80 阅读2分钟

一、线程的概念?

线程:表示一条独立的执行流,java虚拟机允许程序拥有多个线程,每个线程拥有独立的栈和程序计数器。

二、线程的生命周期

image.png

  1. NEW: 创建一个新线程。
  2. RUNNABLE: 处于可运行状态 (可能是运行中也可能是等待来自操作系统的调用)。
  3. BLOCKED: 等待监视器锁定而被阻止的线程的线程状态,处于阻塞状态的线程正在等待监视器锁进入同步块/方法。
  4. WAITING: 线程调用了如下方法而处于等待状态,Object.wait(),Thread.join()等。
  5. TIMED_WAITING: 线程调用了如下方法而处于超时等待状态,Object.wait(long),Thread.join(long)等,超过时间,线程会自动唤醒。
  6. TERMINATED: 线程消亡,线程执行完成或者线程异常导致线程执行终止。

三、创建线程的方式

  1. 继承Thread类
  2. 实现Runnable
  3. 实现Callable
  4. 线程池

四、线程常用方法

  1. 是否守护线程?
public final boolean isDaemon() {
    return daemon;
}
  1. 线程sleep ,线程休眠期间会让出cpu资源
public static native void sleep(long millis) throws InterruptedException;
  1. 线程yield,向调度程序告知,当前线程愿意放弃线程资源,至于调度器采不采纳不知道。
public static native void yield();
  1. 线程join ,让调用线程join方法的线程等待该线程结束
public final void join() throws InterruptedException {
    join(0);
}

五、线程的优缺点

  1. 充分利用多cpu的处理能力,单线程只能利用一个cpu,多线程就能从分利用多cpu的处理能力
  2. 更好的例如IO资源,例如:网络请求,多个请求可以使用多个线程实现;多数据量用多线程实现快速处理等。