美文网首页
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

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