zoukankan      html  css  js  c++  java
  • 【并发】百行代码看懂线程状态

    package club.interview.concurrent.learn;
    
    import java.util.concurrent.locks.LockSupport;
    
    /**
     * 中断 没有这个线程状态
     * {@link Thread#interrupt()}  标记为中断
     * {@link Thread#isInterrupted()} 不会清除标志位
     * {@link Thread#interrupted()}  静态方法 会清除标志位
     * thread.interrupt(); thread.isInterrupted() Thread.interrupted()
     * 阻塞  block 等锁
     *
     * @author QuCheng on 2020/6/22.
     */
    public class ThreadStatus {
    
        public static void main(String[] args) {
            Object lock = new Object();
            new Thread(() -> {
                synchronized (lock) {
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
            Thread thread = new Thread(() -> {
                try {
                    Thread.sleep(100);
                    LockSupport.park();
                    synchronized (lock) {
                        System.out.println("get lock");
                    }
                } catch (InterruptedException e) {
                    System.out.println("haha" + Thread.interrupted());
                }
                System.out.println("thread is finished");
            });
            System.out.println("1 " + thread.getState());
            thread.start();
            System.out.println("2 " + thread.getState());
            try {
                Thread.sleep(50);
                System.out.println("3 " + thread.getState());
                Thread.sleep(60);
                System.out.println("4 " + thread.getState());
                LockSupport.unpark(thread);
                Thread.sleep(1);
                System.out.println("5 " + thread.getState());
                System.out.println("5.1 isInterrupted = " + thread.isInterrupted());
                thread.interrupt();
                System.out.println("5.2 isInterrupted = " + thread.isInterrupted());
                System.out.println("5.3 " + thread.getState());
                thread.join();
                System.out.println("6 " + thread.getState());
            } catch (InterruptedException e) {
                System.out.println("sleep is interrupted");
            }
        }
    }

    结果

    1 NEW
    2 RUNNABLE
    3 TIMED_WAITING
    4 WAITING
    5 BLOCKED
    5.1 isInterrupted = false
    5.2 isInterrupted = true
    5.3 BLOCKED
    get lock
    thread is finished
    6 TERMINATED

     
  • 相关阅读:
    DotnetBrowser入门教程-(2)启动简单的Web服务
    DotnetBrowser入门教程-(1)浏览器控件使用
    Delphi初始化与结束化
    用友二次开发之用友备份专家[1.01]
    用友账套恢复工具
    用友二次开发之总账自定义结转
    用友二次开发之登陆界面
    用友二次开发之U810.1销售预订单导入
    表格控件表头栏目(Column)与数据表头步
    Delphi开发的IP地址修改工具
  • 原文地址:https://www.cnblogs.com/nightOfStreet/p/13384104.html
Copyright © 2011-2022 走看看