当前位置:首页 > Java > 正文内容

Java多线程-线程状态

flowstone6年前 (2019-08-25)Java521

线程状态

6个状态定义:java.lang.Thread.State

  1. New: 尚未启动的线程的线程状态。

  2. Runnable: 可运行线程的线程状态,等待CPU调度。

  3. Blocked: 线程阻塞等待监视器锁定的线程状态。处于synchronized同步代码块或方法中被阻塞。

  4. Waiting: 等待线程的线程状态。下列不带超时的方式:Object.wait、Thread.join、LockSupport.park

  5. Timed Waiting: 具有指定等待时间的等待线程的线程状态。下列超时的方式:Thread.sleep、Object.wait、Thread.join、LockSupport.parkNanos、LockSupport.parkUntil



线程状态

常见线程状态切换

新建->运行->终止

Thread thread1 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("thread1当前状态:" + Thread.currentThread().getState().toString());
                System.out.println("thread1 执行了");
            }
        });
System.out.println("没调用start方法,thread1当前状态:" + thread1.getState().toString());
thread1.start();
Thread.sleep(2000L); // 等待thread1执行结束,再看状态
System.out.println("等待两秒,再看thread1当前状态:" + thread1.getState().toString());


新建->运行->等待->运行->终止

Thread thread2 = new Thread(new Runnable() {
            @Override
            public void run() {
                try {// 将线程2移动到等待状态,1500后自动唤醒
                    Thread.sleep(1500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("thread2当前状态:" + Thread.currentThread().getState().toString());
                System.out.println("thread2 执行了");
            }
        });
System.out.println("没调用start方法,thread2当前状态:" + thread2.getState().toString());
thread2.start();
System.out.println("调用start方法,thread2当前状态:" + thread2.getState().toString());
Thread.sleep(200L); // 等待200毫秒,再看状态
System.out.println("等待200毫秒,再看thread2当前状态:" + thread2.getState().toString());
Thread.sleep(3000L); // 再等待3秒,让thread2执行完毕,再看状态
System.out.println("等待3秒,再看thread2当前状态:" + thread2.getState().toString());


新建->运行->阻塞->运行->终止

Thread thread3 = new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (Demo2.class) {
                    System.out.println("thread3当前状态:" + Thread.currentThread().getState().toString());
                    System.out.println("thread3 执行了");
                }
            }
        });
synchronized (Demo2.class) {
    System.out.println("没调用start方法,thread3当前状态:" + thread3.getState().toString());
    thread3.start();
    System.out.println("调用start方法,thread3当前状态:" + thread3.getState().toString());
    Thread.sleep(200L); // 等待200毫秒,再看状态
    System.out.println("等待200毫秒,再看thread3当前状态:" + thread3.getState().toString());
}
Thread.sleep(3000L); // 再等待3秒,让thread3执行完毕,再看状态
System.out.println("等待3秒,让thread3抢到锁,再看thread3当前状态:" + thread3.getState().toString());


扫描二维码推送至手机访问。

版权声明:本文由薛尧的博客发布,如需转载请注明出处。

本文链接:https://flowstone.sourceforge.io/?id=49

分享给朋友:

相关文章

Java Random入门

什么是Random?当用户要产生一个随机数,java本身提供了丰富的Random类。用户可以根据需求创建Random对象,根据Random类下的方法创建特殊的随机数。如何创建Random?首先用户要创建一个Random对象Random&nb...

Spring的AOP编程

AOP为Aspect Oriented Programming(面向切面编程)AOP的好处:在不修改源代码的情况下,可以实现功能的增强JDK动态代理缺点:只能针对实现了接口的类实现代理/**  * Jdk的动态代理...

Ehcache缓存简单使用

SPRING整合EHCACHE1.引入坐标pom.xml<!-- ehcache的缓存框架 --> <dependency>     <group...

import和import static说明

今天学习rest assured自动测试框架时,写了一些Demo,看到官网上快速指南上有静态导入某个包,起初没有注意以为是import的另一种叫法,在代码的部分导入了所需要的包,但是不能调用包中的方法。后来在百度上找到了解释,原来静态导入包...

IntelliJ IDEA技巧一之隐藏.idea目录

问题场景通过IntelliJ IDEA软件创建Java Web项目时,项目目录中总会生成.idea配置目录并在软件界面里显示,影响项目美感,如何在软件界面中隐藏.idea目录呢?解决方法打开IDEA软件的设置(Mac是Preferences...

Spring Cloud入门教程一之Eureka Server

项目环境MacOSJDK1.8IntelliJ IDEA 2018.2Maven 3.5.4创建项目采用Spring Initializr创建项目选择Cloud Discovery->Eureka Discovery->项目名称...