美文网首页
Concurrency-Thread

Concurrency-Thread

作者: 甜甜起司猫_ | 来源:发表于2021-05-11 21:51 被阅读0次

Concurrency-Thread

线程创建

线程创建有3种方式:

  1. 继承Thread类
  2. 实现Runnable接口
  3. 使用ExecutorSerivce+Callabel+Future实现结果返回的多线程

线程是调度的基本单位,进程是资源分配的基本单位。

线程状态

  1. NEW 新建
  2. RUNNABLE/RUNNING 就绪/运行中
  3. WAITING/TIME WAITING 等待/超时等待
  4. BLOCKED 阻塞
  5. TERMINATED 结束
线程状态.jpeg

线程调度

线程优先级

Java线程有优先级,优先级高的线程会获得较多的执行机会。

Java线程优先级用1~10的整数表示,使用setPriority()getPriority()方法分别设置和获取线程的优先级。

Thread类中有3中优先级的静态常量:

static int MAX_PRIORITY     // 线程可以具有的最高优先级,取值为 10。
static int MIN_PRIORITY     // 线程可以具有的最低优先级,取值为 1。
static int NORM_PRIORITY    // 分配给线程的默认优先级,取值为 5。

每个线程都有默认的优先级:NORM_PRIORITY。优先级可以被继承,如果A线程中创建B线程,那么A线程和B线程拥有相同的优先级。

线程常用方法

sleep

进入waiting/time waiting状态,不释放锁。

join

被调用的线程会被阻塞直到调用线程执行结束。底层是被阻塞线程调用了wait0()方法。

interrupted

返回当前线程的中断状态;将当前线程的中断状态设为false;打断标记为真时,会让LockSupport.park()失效。

wait

在synchronized块中调用,线程进入waiting/time waiting状态,释放锁。

sleep和wait区别

共同点:

  1. 可以指定线程阻塞的毫秒数。
  2. 如果线程处于sleep/wait/join状态,此时调用线程的的interrupted方法,会抛出InterruptedException。

不同点:

  1. sleep属于Thread类方法,wait属于Object类方法。
  2. sleep不释放锁,wait释放锁
  3. wait需要在synchronized块中使用
  4. sleep需要捕捉异常

相关文章

  • Concurrency-Thread

    Concurrency-Thread 线程创建 线程创建有3种方式: 继承Thread类 实现Runnable接口...

网友评论

      本文标题:Concurrency-Thread

      本文链接:https://www.haomeiwen.com/subject/tkondltx.html