关于多线程的状态

--如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3890266.html  "谢谢--

线程共有6种状态:
1.新建线程---使用new来新建一个线程
2.运行线程---调用start()方法,线程处于运行或可运行状态
3.线程阻塞---线程需要获得内置锁,当该锁被其他线程使用时,此线程处于阻塞状态
4.线程等待---当线程等待其他线程通知调度表可以运行时,此时线程处于等待状态
5.线程计时等待---当线程调用含有时间参数的方法(如sleep())时,线程可进入计时等待状态
6.终止线程--当线程的run()方法结束或者出现异常时,线程处于终止状态

注意:在写多线程程序时,要时刻注意线程的状态,不同状态下,线程能够执行的任务是不同的
使用Thread类的getState()方法可以获取到线程的状态,该方法的返回值是Thread.State,
它是线程状态类的枚举。如下表:
枚举常量 含义
NEW 新建状态
RUNNABLE 运行(可运行)状态
BLOCKED 阻塞状态
TIMED_WAITING 休眠状态
WAITING 等待状态
TERMINATED 终止状态

常用方法:
wait(): 让线程等待
notify():唤醒一个线程
notifyAll():唤醒所有线程
sleep():让线程休眠
interrupt():中断线程
yield():暂停当前线程执行其他线程

代码例子:
实现并输出当前线程的状态:

package com.xhj.thread;

/**
* 获取线程状态
*
* @author XIEHEJUN
*
*/
public class ThreadState implements Runnable {
public synchronized void waitForASecond() throws InterruptedException {
wait(500);
}

public synchronized void waiting() throws InterruptedException {
wait();
}

public synchronized void notifyNow() throws InterruptedException {
notify();
}

@Override
public void run() {
try {
waitForASecond();
waiting();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}

public static void main(String[] args) throws InterruptedException {
ThreadState state = new ThreadState();
Thread thread = new Thread(state);
System.out.println("新建线程:" + thread.getState());
thread.start();
System.out.println("线程运行:" + thread.getState());
Thread.sleep(100);
System.out.println("计时等待线程:" + thread.getState());
Thread.sleep(1000);
System.out.println("等待线程:" + thread.getState());
state.notifyNow();
System.out.println("唤醒线程:" + thread.getState());
Thread.sleep(1000);
System.out.println("终止线程:" + thread.getState());
}

}

java笔记--关于多线程状态的理解和应用的更多相关文章

  1. java笔记--对信号量Semaphore的理解与运用

    java Semaphore 信号量的使用: 在java中,提供了信号量Semaphore的支持. Semaphore类是一个计数信号量,必须由获取它的线程释放, 通常用于限制可以访问某些资源(物理或 ...

  2. JAVA笔记14__多线程共享数据(同步)/ 线程死锁 / 生产者与消费者应用案例 / 线程池

    /** * 多线程共享数据 * 线程同步:多个线程在同一个时间段只能有一个线程执行其指定代码,其他线程要等待此线程完成之后才可以继续执行. * 多线程共享数据的安全问题,使用同步解决. * 线程同步两 ...

  3. java笔记--关于多线程如何查看JVM中运行的线程

    查看JVM中的线程 --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3890280.html "谢谢-- ThreadGrou ...

  4. java笔记--局部内部类认识与理解

    java内部类 内部类应用最多的场景是在编写GUI程序时,将大量的事件监听处理放在了内部类中进行 --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XH ...

  5. java笔记--匿名内部类和静态内部类的理解和使用

    匿名内部类 --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3889467.html  "谢谢-- 1.由于局部内部类并不可见 ...

  6. [译]线程生命周期-理解Java中的线程状态

    线程生命周期-理解Java中的线程状态 在多线程编程环境下,理解线程生命周期和线程状态非常重要. 在上一篇教程中,我们已经学习了如何创建java线程:实现Runnable接口或者成为Thread的子类 ...

  7. Java线程Thread的状态解析以及状态转换分析 多线程中篇(七)

    线程与操作系统中线程(进程)的概念同根同源,尽管千差万别. 操作系统中有状态以及状态的切换,Java线程中照样也有. State 在Thread类中有内部类 枚举State,用于抽象描述Java线程的 ...

  8. 多线程系列之 java多线程的个人理解(二)

    前言:上一篇多线程系列之 java多线程的个人理解(一) 讲到了线程.进程.多线程的基本概念,以及多线程在java中的基本实现方式,本篇主要接着上一篇继续讲述多线程在实际项目中的应用以及遇到的诸多问题 ...

  9. Java四种引用--《深入理解Java虚拟机》学习笔记及个人理解(四)

    Java四种引用--<深入理解Java虚拟机>学习笔记及个人理解(四) 书上P65. StrongReference(强引用) 类似Object obj = new Object() 这类 ...

随机推荐

  1. Html5与本地App资料整理分析

    最近开发了一个小的手机网站,重新了解了本地应用,html5,混合应用,webApp等概念,整理下相关的资料,略带自己的思考 用户固有的使用习惯 在<2012年度 HTML5状况及发展形势报告.p ...

  2. window7 下安卓开发环境搭建

    最新Win7下配置搭建安卓开发环境 注意:因为墙的原因 google的更新服务器需要改 hosts 你懂的.. 74.125.237.1       dl-ssl.google.com  不行就VPN ...

  3. django notes 四: Writing views

    views 其实没什么可看的, 在  django  中 views 就是 controller, 是处理请求的, 就是一个普通的 python 方法. 一般从 request 中提取请求参数, 然后 ...

  4. 对于SQL Server 2008删除或压缩数据库日志的方法

    由于数据库日志增长被设置为“无限制”,所以时间一长日志文件必然会很大,一个400M的数据库居然有4G的LOG文件,严重占用了磁盘空间.由于主要是做OLAP,所以数据库本身不会有大变动,所以日志也就没有 ...

  5. <数据挖掘导论>读书笔记10聚类分析续

    基于原型的聚类 模糊c均值使用模糊逻辑和模糊集合论的概念,提出一种聚类方案,它很像K均值,但是不需要硬性地将对象分派到一个簇中.模糊c均值算法有时也称为FCM 混合模型聚类采取这样的访谈,簇集合可以用 ...

  6. JAVA 方法 和Scanner

    方法:包含于类或对象中,是解决一类问题步骤的有序组合. 算法:解决一类问题的思想. Scanner next()与nextLine()区别 next(): 1.一定要读取到有效字符后才可以结束输入. ...

  7. 泛型委托Action与ActionT

    以前都是自己写委托,其实系统内部给我们系统了委托的. Action ——委托的非泛型版本就是一个无参数无返回值的委托. Action<T>——委托的泛型版本是一个无返回值,但是参数个数及类 ...

  8. 数据集DataSet

    ADO.NET数据访问技术的一个突出的特点就是支持离线访问,而实现这种离线访问技术的核心就是DateSet对象,该对象通过将数据驻留在内存来实现离线访问. DataSet对象由一组DataTable对 ...

  9. MapReduce详解和WordCount模拟

    最早接触大数据,常萦绕耳边的一个词「MapReduce」.它到底是什么,能做什么,原理又是什么?且听下文讲解. 是什么 MapReduce 即是一个编程模型,又是一个计算框架,它充分采用了分治的思想, ...

  10. 一个JNI的helloworld小demo

    最近想学习一下jni,在网上看了一些demo,自己也操作了一遍,首先我将我自己学习的demo网站贴出来:https://blog.csdn.net/lwcloud/article/details/78 ...