java笔记--关于多线程状态的理解和应用
关于多线程的状态
--如果朋友您想转载本文章请注明转载地址"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笔记--关于多线程状态的理解和应用的更多相关文章
- java笔记--对信号量Semaphore的理解与运用
java Semaphore 信号量的使用: 在java中,提供了信号量Semaphore的支持. Semaphore类是一个计数信号量,必须由获取它的线程释放, 通常用于限制可以访问某些资源(物理或 ...
- JAVA笔记14__多线程共享数据(同步)/ 线程死锁 / 生产者与消费者应用案例 / 线程池
/** * 多线程共享数据 * 线程同步:多个线程在同一个时间段只能有一个线程执行其指定代码,其他线程要等待此线程完成之后才可以继续执行. * 多线程共享数据的安全问题,使用同步解决. * 线程同步两 ...
- java笔记--关于多线程如何查看JVM中运行的线程
查看JVM中的线程 --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3890280.html "谢谢-- ThreadGrou ...
- java笔记--局部内部类认识与理解
java内部类 内部类应用最多的场景是在编写GUI程序时,将大量的事件监听处理放在了内部类中进行 --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XH ...
- java笔记--匿名内部类和静态内部类的理解和使用
匿名内部类 --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3889467.html "谢谢-- 1.由于局部内部类并不可见 ...
- [译]线程生命周期-理解Java中的线程状态
线程生命周期-理解Java中的线程状态 在多线程编程环境下,理解线程生命周期和线程状态非常重要. 在上一篇教程中,我们已经学习了如何创建java线程:实现Runnable接口或者成为Thread的子类 ...
- Java线程Thread的状态解析以及状态转换分析 多线程中篇(七)
线程与操作系统中线程(进程)的概念同根同源,尽管千差万别. 操作系统中有状态以及状态的切换,Java线程中照样也有. State 在Thread类中有内部类 枚举State,用于抽象描述Java线程的 ...
- 多线程系列之 java多线程的个人理解(二)
前言:上一篇多线程系列之 java多线程的个人理解(一) 讲到了线程.进程.多线程的基本概念,以及多线程在java中的基本实现方式,本篇主要接着上一篇继续讲述多线程在实际项目中的应用以及遇到的诸多问题 ...
- Java四种引用--《深入理解Java虚拟机》学习笔记及个人理解(四)
Java四种引用--<深入理解Java虚拟机>学习笔记及个人理解(四) 书上P65. StrongReference(强引用) 类似Object obj = new Object() 这类 ...
随机推荐
- 【文档】七、Mysql Binlog不同事件类型的事件内容
下面主要讲述了每个类型的事件中的固定和可变部分的数据. Start_log_event_v3/START_EVENT_V3 这个事件出现在v1或v3的binlog文件的开头部分.对于4.0和4.1版本 ...
- linux 和 windows 安装composer
在 Linux 和 Mac OS X 中可以运行如下命令: curl -sS https://getcomposer.org/installer | phpmv composer.phar /usr/ ...
- VisualSVN Server提供程序无法执行所尝试的操作 0x80041024
VisualSVN安装后没有提供VisualSVN Server Manager的快捷方式,如下图: 可以在安装目录的bin文件夹下找到VisualSVN Server.msc,添加快捷方式.建议Vi ...
- SVD总结
1.概述 我们先从实数域R开始说起,再延伸到复数域C上去,先列出一个表格,把实数域以及复数域中常见的矩阵及其性质概括如下: 表1 常见矩阵及其性质 我们知道实对称矩阵正交相似于对角阵,从而将一个方阵对 ...
- CentOS7手动修改系统时间
CentOS7 永久修改系统时间 安装在虚拟机上的CentOS7的时间分为系统时间和硬件时间.二者都修改,重启系统(init 6 )才会永久生效.修改步骤如下 查看当前系统时间 date 修改当 ...
- zabbix与nagios八项重要对比 结论根据业务环境需求决定
1.web功能: Nagios简单直观,报警与数据都在同一页面,***.红色即为问题项.Nagios web端不要做任何配置. Zabbix监控数据与报警是分开的,查看问题项需要看触发器,查看数据在最 ...
- Java中用双缓冲技术消除闪烁
在Java编写具有连贯变化的窗口程序时,通常的办法是在子类中覆盖父类的paint(Graphics)方法,在方法中使用GUI函数实现窗口重绘的过程.连贯变换的窗口会不断地调用update(Graphi ...
- 第7天:javascript-DOM 获取标签、注册事件改变属性的值、innerText、改变属性的值等
javascript WEB api------DOM document object model 案例 为元素注册点击事件,弹出对话框 <input type="button&quo ...
- DES c#加密后java解密
public static String byteArr2HexStr(byte[] bytIn) { StringBuilder builder = new StringBuilder(); for ...
- Asp.Net 之字符串和集合的使用
一:object:所有类的基类,所有类都直接或者间接继承自object 二:string 字符串的定义:string str=”” string str=new string(new char[ ...