java 精灵线程_Java线程的状态分析

/*** 线程的状态分析

*@authoraa

**/

public classThreadState {public static void main(String[] args) throwsException {/*** 新建线程,线程为新建状态

* jdk:至今尚未启动的线程的状态。

* 如果不给线程设置名称,线程的名称将会是:Thread-0,Thread-1。。。。。*/ThreadDemo td= newThreadDemo() ;

System.out.println("新建状态:" + td.getState()) ; //新建状态:NEW

/*** 可运行状态:当线程有资格运行,调用start方法,线程首先进入可运行状态,

* 可运行状态,不一定被线程调度程序运行,

* 简单来说,调用start方法后,该线程依然是可运行状态,但未运行,

* 存放在可运行池中,

* 线程在运行的过程中,该线程的状态也是可运行状态

*

* djk:可运行线程的线程状态。处于可运行状态的某一线程正在 Java 虚拟机中运行,

* 但它可能正在等待操作系统中的其他资源,比如处理器。*/td.start() ;

System.out.println("可运行状态:" + td.getState()) ; //可运行状态:RUNNABLE

/*** Main线程休眠100毫秒时,td线程也就调用了waitForTwoSecond()方法,

* 指定休眠2秒后,再回到可运行状态

* 指定等待一定时长时,休眠状态:TIMED_WAITING

* jdk:具有指定等待时间的某一等待线程的线程状态。某一线程因为调用以下带有指定正等待时间的方法之一而处于定时等待状态:

* 带有超时值的 Thread.sleep (sleep必须带值)

* 带有超时值的 Object.wait

* 带有超时值的 Thread.join*/Thread.sleep(100);

System.out.println("休眠状态:" + td.getState()) ; //具有指定等待时间的某一等待线程的线程状态。

/*** 这里Main线程一共休眠2100毫秒时,td线程调用了waitLong()方法,

* 该方法调用了wait(),使线程处于一直等待的状态

* jdk:某一等待线程的线程状态。某一线程因为调用下列方法之一而处于等待状态:

* 不带超时值的 Object.wait

* 不带超时值的 Thread.join*/Thread.sleep(2000);

System.out.println("等待状态:" + td.getState()) ; //等待状态:WAITING

td.interrupt() ;/*** 这里输出的也可能是终止状态

* jdk:受阻塞并且正在等待监视器锁的某一线程的线程状态。处于受阻塞状态的某一线程正在等待监视器锁,

* 以便进入一个同步的块/方法,或者在调用 Object.wait 之后再次进入同步的块/方法。*/td.notifyWait() ;

System.out.println("阻塞状态:" +td.getState()) ;/*** jdk:已终止线程的线程状态。线程已经结束执行。*/Thread.sleep(1000);

System.out.println("终止状态:" +td.getState()) ;/*** 可以简单归纳为:新建 , 可运行 , 运行 , 阻塞 , 死亡

*

* Thread.yeild() 让当前运行的线程回到可运行状态,让出时间给其他线程运行,但可能没用

* jdk:暂停当前正在执行的线程对象,并执行其他线程。*/

/*** join()的用法

* jdk:等待该线程终止的时间最长为 millis 毫秒。超时为 0 意味着要一直等下去。

* 简单来说,如下,由于td线程被Main线程所启动,td线程调用join方法后,

* 也就是Mian线程要等到td线程运行完毕才会执行join方法后面的代码,

* jdk的解析在这里就是将Main线程加入到了td线程的后面

* join加参数,在这里意思就是Main线程需要等待2秒时间再继续执行join方法后面的代码,*/

//td.join() ;//td.join(2000) ;

System.out.println("线程加入join之后") ;

}private static class ThreadDemo extendsThread {

@Overridepublic voidrun() {try{//测试join方法//for (int i = 0; i < 5; i++) {//System.out.println(i);//sleep(1000) ;//}

waitForTwoSecond() ;

waitLong() ;

}catch(Exception e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}public synchronized void waitForTwoSecond() throwsException {

wait(2000) ;

}public synchronized void waitLong() throwsException {

wait() ;

}public synchronized void notifyWait() throwsException {

notify() ;

}

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/428482.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【02】koala编译中文出错(已放弃不用)

http://koala-app.com/index-zh.html koala 下载地址。sass。中文编译出错&#xff1a;打开 Koala文件夹位置->rubygems->gems->sass->lib->sass->engine.rb。添加这句话。在所有的request XXXX 之后即可。复制添加Encoding.default_external Encoding.find…

java jlabel里面加button_在Java Swing中通过JLabel覆盖JButton?

是否可以在Swing中将Button叠加在Label上&#xff1f;例如,如果有一个带有图像的JLabel而没有文本,我想在我的JLabel上覆盖我的按钮.标签定义如下&#xff1a;myLabel new javax.swing.JLabel(new ImageIcon( myPicture ));如果没有,那么任何想法我怎么能意识到这一点,谢谢.编…

项目管理之码云和git

目录 学习链接 1 码云 1 第一步&#xff0c;注册 2 第二部&#xff0c;登录 2 创建项目 2 git管理 4 如何生成公钥 5 clone项目 5 提交项目 6 1.本地初始化一个项目 6 2.开始第一次上传你的项目 7 5.Git基本操作 8 学习链接 https://www.cnblogs.com/xiaoxiaoccaiya/p/7125136.…

java 传递脚本给c_java – JNI将参数传递给c的方法

我有一个c文件myCppTest.cpp,它有方法int myFunction(int argv, char **argc) {}和myClass.java中的Java本机方法public native int myFunction (int argv, char[][] argc);使用javah -jni myClass生成头文件后,我有头JNIEXPORT jint JNICALL Java_JPTokenizer_init(JNIEnv *, …

【例3-4】求后序遍历

【例3-4】求后序遍历 链接&#xff1a;http://ybt.ssoier.cn:8088/problem_show.php?pid1339时间限制: 1000 ms 内存限制: 65536 KB【题目描述】 输入一棵二叉树的先序和中序遍历序列&#xff0c;输出其后序遍历序列。 【输入】 共两行&#xff0c;第一行一个字符串&a…

java classpath bat_tomcat启动批处理——setclasspath.bat | 学步园

除了上面两个批处理&#xff0c;还有一个比较重要的脚本&#xff0c;即是setclasspath.bat&#xff0c;它主要负责寻找、检查JAVA_HOME和JRE_HOME两个变量。********************************************************************************************if ""%1&q…

验证 Swarm 数据持久性 - 每天5分钟玩转 Docker 容器技术(104)

上一节我们成功将 Rex-Ray Volume 挂载到了 Service。本节验证 Failover 时&#xff0c;数据不会丢失。 Scale Up 增加一个副本&#xff1a; docker service update --replicas 2 my_web 运行之前我们先推测一下&#xff0c;理想的结果应该是&#xff1a;swarm 在 swarm-worker…

SQL Server安全级别2的阶梯:身份验证

SQL Server安全级别2的阶梯&#xff1a;身份验证作者&#xff1a;Don Kiely&#xff0c;2014/06/18 该系列本文是“Stairway系列&#xff1a;SQL Server安全性的阶梯”的一部分 SQL Server提供了保护服务器和数据免受当今复杂攻击所需的一切。但是&#xff0c;在您有效使用这些…

java file 堵塞_单元测试最终在Java 6中阻塞

首先考虑使用IOUtils.closeQuietly(),它会将未经测试的代码(可能是重复代码)减少为&#xff1a;try {f new BufferedInputStream(new FileInputStream(source));f.read(buffer);} finally {IoUtils.closeQuietly(f);}现在变得艰难. “正确”的方法是将BufferedInputStream的创…

java jna调用dll文件_关于java jna调用dll的问题

public interface User32 extends StdCallLibrary{User32 INSTANCE (User32)Native.loadLibrary("User32",User32.class);//加载系统User32 DLL文件&#xff0c;也可以是C写的DLL文件int SendMessageA(int hwnd,int msg,int wparam,int lparam);int FindWindowA(Str…

【bzoj4444】[Scoi2015]国旗计划 倍增

题目描述 给出一个圈和若干段&#xff0c;问&#xff1a;对于所有的 $i$ &#xff0c;选择第 $i$ 段的情况下&#xff0c;最少需要选择多少段&#xff08;包括第 $i$ 段&#xff09;能够覆盖整个圈&#xff1f;输入 第1行&#xff0c;包含2个正整数N,M&#xff0c;分别表示边防…

java multimap 序列化_C++ JSON库的使用

1. 如何使用&#xff1f;2. 常用方法2.1 创建json对象2.1.1 使用cin,cout输入输出流2.1.2 提供根据键直接生成键值对的方法2.1.3 json::array json::object2.1.4 几个区别2.2 序列化2.2.1 标准输出自动序列化2.2.2 使用dump()函数2.3 反序列化2.3.1 从标准输入反序列化2.3.2 通…

【Excle数据透透视表】如何删除数据透视表

选中区域A4:C17,在键盘上按DELETE键删除&#xff0c;结果提示&#xff1a;那么如何删除呢&#xff1f;解决方案选中整个数透视表&#xff0c;再删除具体操作&#xff1a;选中整个数据透视表→DELETE注意&#xff1a;删除之后&#xff0c;源数据不会受到影响转载于:https://www.…

java 启动redis服务器_docker启动redis并使用java连接

一、先查找镜像docker search redis二、拉取镜像docker pull redis三、等待拉取完毕四、查看拉去的镜像docker iamges五、运行redis连接1&#xff1a;https://blog.csdn.net/weixin_38956287/article/details/80423607连接2&#xff1a;http://www.runoob.com/docker/docker-in…

【算法学习】整体二分

我们开门见山&#xff0c;讲讲一道sb题&#xff1a; 给你一个数组&#xff0c;查这个数组的第x大元素。 排序&#xff1f;可以 二分&#xff1f;怎么做啊&#xff1f; 二分出一个mid&#xff0c;判断这个数组中有多少个数小于等于mid&#xff0c;如果个数大于等于x&#xff0c;…

mysql leave的作用_MySQL数据库中DELIMITER的作用

以下的文章主要是向大家描述的是MySQL数据库中delimiter的作用是什么?我们一般都认为这个命令和存储过程关系不大&#xff0c;到底是不是这样的呢&#xff1f;以下的文章将会给你相关的知识&#xff0c;望你会有所收获。下面是一个存储过程的实例&#xff1a;DELIMITER $$USE …

Fullpage参数说明

参数说明 $(document).ready(function() {$(#fullpage).fullpage({//Navigationmenu: false,//绑定菜单&#xff0c;设定的相关属性与anchors的值对应后&#xff0c;菜单可以控制滚动&#xff0c;默认为false。anchors:[firstPage, secondPage],//anchors定义锚链接&#xff0c…

mysql100个优化技巧_完整篇:100+个MySQL调试和优化技巧(2)

▼MySQL模式优化51.检查和经常优化表.52. 经常重写InnoDB表优化.53. 有时&#xff0c;当添加列时删除索引&#xff0c;然后在添加回来索引&#xff0c;这样就会更快.54. 针对不同的需求&#xff0c;使用不同的存储引擎.55. 使用归档存储引擎日志表或审计表-这是更有效地写道.56…

Java Swing

编辑中... 转载于:https://www.cnblogs.com/startup-try/p/8040625.html

包装类java_Java 包装类

也叫过滤流类处理刘类没有对应到任何具体的流设备&#xff0c;需要给它传递一个对应的具体流设备的输出/输入流对象I/0内存缓冲BufferedInputStream,BufferedOutputStream 缓冲区包装类 默认32个字节缓冲区的缓冲流内存/磁盘扇区一次读写操作所能完成最大字节数的整数倍(4的整数…