JAVA 线程状态转换
Thread类中State枚举定义:
public enum State {
        /**
         * Thread state for a thread which has not yet started.
         */
        NEW,
        /**
         * Thread state for a runnable thread.  A thread in the runnable
         * state is executing in the Java virtual machine but it may
         * be waiting for other resources from the operating system
         * such as processor.
         */
        RUNNABLE,
        /**
         * Thread state for a thread blocked waiting for a monitor lock.
         * A thread in the blocked state is waiting for a monitor lock
         * to enter a synchronized block/method or
         * reenter a synchronized block/method after calling
         * {@link Object#wait() Object.wait}.
         */
        BLOCKED,
        /**
         * Thread state for a waiting thread.
         * A thread is in the waiting state due to calling one of the
         * following methods:
         * <ul>
         *   <li>{@link Object#wait() Object.wait} with no timeout</li>
         *   <li>{@link #join() Thread.join} with no timeout</li>
         *   <li>{@link LockSupport#park() LockSupport.park}</li>
         * </ul>
         *
         * <p>A thread in the waiting state is waiting for another thread to
         * perform a particular action.
         *
         * For example, a thread that has called <tt>Object.wait()</tt>
         * on an object is waiting for another thread to call
         * <tt>Object.notify()</tt> or <tt>Object.notifyAll()</tt> on
         * that object. A thread that has called <tt>Thread.join()</tt>
         * is waiting for a specified thread to terminate.
         */
        WAITING,
        /**
         * Thread state for a waiting thread with a specified waiting time.
         * A thread is in the timed waiting state due to calling one of
         * the following methods with a specified positive waiting time:
         * <ul>
         *   <li>{@link #sleep Thread.sleep}</li>
         *   <li>{@link Object#wait(long) Object.wait} with timeout</li>
         *   <li>{@link #join(long) Thread.join} with timeout</li>
         *   <li>{@link LockSupport#parkNanos LockSupport.parkNanos}</li>
         *   <li>{@link LockSupport#parkUntil LockSupport.parkUntil}</li>
         * </ul>
         */
        TIMED_WAITING,
        /**
         * Thread state for a terminated thread.
         * The thread has completed execution.
         */
        TERMINATED;
    }

- sleep(long)
public class MyThread implements  Runnable {
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+"========="+Thread.currentThread().getState());
        try {
            Thread.sleep(10000L);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
测试i类:
public class ThreadTest {
    public static void main(String[] args) throws InterruptedException {
        Thread t=new Thread(new MyThread());
        t.start();
        Thread.sleep(1000L);
        System.out.println(t.getName()+">>>>>>>"+t.getState());
    }
}
运行结果:
Thread-0=========RUNNABLE
Thread-0>>>>>>>TIMED_WAITING Process finished with exit code 0
- join()
public class MyThread implements Runnable {
    private Thread parent;
    public MyThread(Thread thread) {
        parent = thread;
    }
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName() + "=========" + Thread.currentThread().getState());
        long startTime = System.currentTimeMillis();
        while ((System.currentTimeMillis() - startTime) / 1000 <= 2) {
        }
        System.out.println(parent.getName() + ">>>>" + parent.getState());
    }
}
测试代码:
public class ThreadTest {
    public static void main(String[] args) throws InterruptedException {
        Thread t=new Thread(new MyThread(Thread.currentThread()));
        t.start();
        Thread.sleep(1000L);
        System.out.println(t.getName()+">>>>>>>"+t.getState());
        System.out.println(t.getName()+".join...");
        t.join();
        System.out.println(t.getName()+">>>>>>>"+t.getState());
        System.out.println(Thread.currentThread().getName()+">>>>>>>"+Thread.currentThread().getState());
    }
}
运行结果:
Thread-0=========RUNNABLE
Thread-0>>>>>>>RUNNABLE
Thread-0.join...
main>>>>WAITING
Thread-0>>>>>>>TERMINATED
main>>>>>>>RUNNABLE
- wait()
public class TestService {
    private static Object lock=new Object();
    public void test() throws InterruptedException {
        synchronized (lock) {
            System.out.println(Thread.currentThread().getName() + ":" + Thread.currentThread().getState());
            lock.wait();
        }
    }
}
public class MyThread implements Runnable {
    private TestService testService;
    public MyThread(TestService testService) {
        this.testService = testService;
    }
    @Override
    public void run() {
        try {
            testService.test();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
测试代码:
public class ThreadTest {
    public static void main(String[] args) throws InterruptedException {
        Thread t=new Thread(new MyThread(new TestService()));
        t.start();
        Thread.sleep(1000L);
        System.out.println(t.getName()+":"+t.getState());
    }
}
运行结果:
Thread-0:RUNNABLE
Thread-0:WAITING
JAVA 线程状态转换的更多相关文章
- Java线程状态转换
		前言:对于Java线程状态方面的知识点,笔者总感觉朦朦胧胧,趁着最近整理资料,将Java线程状态方面的知识点总结归纳,以便加深记忆. 1.Java线程状态值 在Thread类源码中通过枚举为线程定义了 ... 
- 浅谈 Java线程状态转换及控制
		线程的状态(系统层面) 一个线程被创建后就进入了线程的生命周期.在线程的生命周期中,共包括新建(New).就绪(Runnable).运行(Running).阻塞(Blocked)和死亡(Dead)这五 ... 
- 一文读懂Java线程状态转换
		前言 本文描述Java线程线程状态及状态转换,不会涉及过多理论,主要以代码示例说明线程状态如何转换. 基础知识 1. 线程状态 Thread源码中的状态说明: 线程可以有6种状态: New(新建) R ... 
- JAVA 线程状态转换图示及说明
		线程状态类型 新建状态(New):新创建了一个线程对象. 就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法.该状态的线程位于可运行线程池中,变得可运行,等待获取C ... 
- Java中的线程状态转换和线程控制常用方法
		Java 中的线程状态转换: [注]:不是 start 之后就立刻开始执行, 只是就绪了(CPU 可能正在运行其他的线程). [注]:只有被 CPU 调度之后,线程才开始执行, 当 CPU 分配给你的 ... 
- Java线程状态及 wait、sleep、join、interrupt、yield等的区别
		Java中的线程状态(详见Java线程状态及转换-MarchOn): wait:Object类的实例方法,释放CPU执行权,进入等待状态,直到 被中断.被拥有该对象锁的线程唤醒(notify或not ... 
- Java线程状态和关闭线程的正确姿势
		1.线程状态及切换 Java中的线程有六种状态,使用线程Thread内的枚举类来实现,如下,我对每个状态都进行了一定的解释. public enum State { /** 表示一个线程还没启用(即未 ... 
- Java线程状态Jstack线程状态BLOCKED/TIMED_WAITING/WAITING解释
		一.线程5种状态 新建状态(New) 新创建了一个线程对象. 就绪状态(Runnable) 线程对象创建后,其他线程调用了该对象的start()方法.该状态的线程位于可运行线程池中,变得可运行,等待获 ... 
- 四十二、Linux 线程——线程同步之条件变量之线程状态转换
		42.1 线程状态转换 42.1.1 状态转换图 42.1.2 一个线程计算,多个线程获取的案例 #include <stdio.h> #include <stdlib.h> ... 
随机推荐
- Windows性能监视器
			前端时间在做动态目标监控,应用程序需要考虑大数据量和多用户并发的操作,系统的性能是解决方案实施性的重要度量.这里简单的记录下Windows中性能监视查看和简单分析. 一般操作系统性能主要涉及到的问题主 ... 
- 如何解决ChemDraw引起的系统崩溃
			运行ChemDraw应用程序时,一般不会引起系统崩溃,但在使用CS software产品可能会引发计算机崩溃.为了方便广大用户的使用,本教程将教授大家如何解决ChemDraw运行中引起的系统崩溃. 当 ... 
- linq select
			var categoryIdArray = MusicCategoryRelationBLL.GetModel(music.Id); music.MusicCategoryIds = string.E ... 
- C语言函数參数传递原理
			C语言中參数的传递方式一般存在两种方式:一种是通过栈的形式传递.还有一种是通过寄存器的方式传递的. 这次.我们仅仅是具体描写叙述一下第一种參数传递方式,第二种方式在这里不做具体介绍. 首先,我们看一下 ... 
- ios开发之--ZHPickView输出格式不出现 +0000
			这样写就不会输出 +0000了 NSDate *select = [_datePicker date]; NSDateFormatter *dateFormatter = [[NSDateFormat ... 
- ZooKeeper(七)-- ZK原生API实现分布式锁
			一.使用场景 在分布式应用,往往存在多个进程提供同一服务.这些进程有可能在相同的机器上,也有可能分布在不同的机器上. 如果这些进程共享了一些资源,可能就需要分布式锁来锁定对这些资源的访问. 二.实现分 ... 
- STM32总线结构和存储器
			也就说我们所操作的就是别名区的位 
- css基础---->学习html(一)
			这里零散的总结一下观看css权威指南书的知识.生命中的诸多告别,比不辞而别更让人难过的,是说一句再见,就再也没见过. 一.首字母与首行的伪类 <dvi> <p>I love y ... 
- 浏览器对js运行时间的限制
			浏览器对js的运行时间进行了限制 1.调用栈尺寸限制 目前大部分的主流浏览器的调用栈尺寸都在10000以上.超过这个尺寸就会报栈溢出的错误 2.长时间脚本限制 浏览器记录一个脚本的运行时间,一旦达到这 ... 
- SpringData JPA查询分页demo
			SpringData JPA 的 PagingAndSortingRepository接口已经提供了对分页的支持,查询的时候我们只需要传入一个 org.springframework.data.dom ... 
