《Java多线程编程核心技术》读后感(十五)

 

 

线程的状态

线程对象在不同的运行时期有不同的状态,状态信息就存在与State枚举类中。

验证New,Runnable,Terminated

new:线程实例化后还从未执行start()方法时的状态

runnable:线程进入运行的状态

terminated:线程被销毁时的状态

package Seven;public class MyThread extends Thread {public MyThread() {System.out.println("构造方法中的状态:" + Thread.currentThread().getState());}@Overridepublic void run() {System.out.println("run方法中的状态:" + Thread.currentThread().getState());}
}
package Seven;public class Run {// NEW,// RUNNABLE,// TERMINATED,// BLOCKED,// WAITING,// TIMED_WAITING,public static void main(String[] args) {try {MyThread t = new MyThread();System.out.println("main方法中的状态1:" + t.getState());Thread.sleep(1000);t.start();Thread.sleep(1000);System.out.println("main方法中的状态2:" + t.getState());} catch (InterruptedException e) {// TODO Auto-generated catch block
            e.printStackTrace();}}}

注意:构造方法中的日志时main主线程的

验证Time_waiting

Time_waiting:线程执行了Thread.sleep()

package Seven;public class MyThread extends Thread {@Overridepublic void run() {try {System.out.println("begin sleep");Thread.sleep(10000);System.out.println("  end sleep");} catch (InterruptedException e) {e.printStackTrace();}}
}
package Seven;public class Run {// NEW,// RUNNABLE,// TERMINATED,// BLOCKED,// WAITING,// TIMED_WAITING,public static void main(String[] args) {try {MyThread t = new MyThread();t.start();Thread.sleep(1000);System.out.println("main方法中的状态:" + t.getState());} catch (InterruptedException e) {// TODO Auto-generated catch block
            e.printStackTrace();}}
}

 

 验证Blocked

blocked:出现在某一个线程等待锁的时候

package Seven;public class MyService {synchronized static public void serviceMethod() {try {System.out.println(Thread.currentThread().getName() + "进入了业务方法!");Thread.sleep(10000);} catch (InterruptedException e) {e.printStackTrace();}}}
package Seven;public class MyThread1 extends Thread {@Overridepublic void run() {MyService.serviceMethod();}}
package Seven;public class MyThread2 extends Thread {@Overridepublic void run() {MyService.serviceMethod();}}
package Seven;public class Run {// NEW,// RUNNABLE,// TERMINATED,// BLOCKED,// WAITING,// TIMED_WAITING,public static void main(String[] args) throws InterruptedException {MyThread1 t1 = new MyThread1();t1.setName("a");t1.start();MyThread2 t2 = new MyThread2();t2.setName("b");t2.start();//Thread.sleep(1000);System.out.println("main方法中的t2状态:" + t2.getState());}
}

验证waiting

waiting:是线程执行了object.wait()方法后所处的状态

package Seven;public class Lock {public static final Byte lock = new Byte("0");}
package Seven;public class MyThread extends Thread {@Overridepublic void run() {try {synchronized (Lock.lock) {Lock.lock.wait();}} catch (InterruptedException e) {e.printStackTrace();}}
}
package Seven;public class Run {// NEW,// RUNNABLE,// TERMINATED,// BLOCKED,// WAITING,// TIMED_WAITING,public static void main(String[] args) {try {MyThread t = new MyThread();t.start();Thread.sleep(1000);System.out.println("main方法中的t状态:" + t.getState());} catch (InterruptedException e) {// TODO Auto-generated catch block
            e.printStackTrace();}}
}

 

转载于:https://www.cnblogs.com/Michael2397/p/7860193.html

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

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

相关文章

队列(queue)

队列(queue)和栈一样支持push和pop两个操作。但与栈不同的是,pop两个操作。但与栈的不同的是,pop完成的不是取出最顶端的元素,而是最底端的元素。也就是说最初放入的元素能够最先被取出(这种行为被叫做FIFO:First In First Out,即…

一题多解,ASP.NET Core应用启动初始化的N种方案[上篇]

ASP.NET Core应用本质上就是一个由中间件构成的管道,承载系统将应用承载于一个托管进程中运行起来,其核心任务就是将这个管道构建起来。在ASP.NET Core的发展历史上先后出现了三种应用承载的编程方式,而且后一种编程模式都提供了针对之前编程…

java程序猿面试问缺点怎么回答_JAVA程序员面试32问,你能回答多少题

第一,谈谈final, finally, finalize的区别。第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?第三,Static Nested Class 和 In…

ExecutorService——shutdown方法和awaitTermination方法

ExecutorService的关闭shutdown和awaitTermination为接口ExecutorService定义的两个方法,一般情况配合使用来关闭线程池。 方法简介shutdown方法:平滑的关闭ExecutorService,当此方法被调用时,ExecutorService停止接收新的任务并且…

WPF 简单模仿 VSCode 界面布局

WPF 简单模仿 VSCode 界面布局本文经原作者授权以原创方式二次分享,欢迎转载、分享。WPF 简单模仿 VSCode 界面布局作者:弈虎-吕女士会翻墙原文链接: https://github.com/Chen-Lin-Zhao-Wei/WPFLikeVSCode分享一篇群友这几天自己写的 WPF 简…

compare()方法+使用compare方法

compare()方法 compare(lob1,lob2,amount,offset_1,offset_2) 1用于比较2个lob存储的数据,比较的方式是从指定偏移量开始,对指定数量的字符或者字节进行比较。 2如果比较内容相同,返回0,否则返回-1或1. 3如果参数设置有误或不合…

linux 下 mysql默认表_linux环境下mysql默认是区分表名大小写的

在linux环境下,mysql默认表明是区分大小写的,我们可以查看全局变量发现:mysql> show variables like lower%;-------------------------------| Variable_name | Value |-------------------------------| lower_case_file_system | OFF || lower_cas…

dot-- 资源汇总

http://graphviz.org/doc/info/attrs.htmlhttp://graphs.grevian.org/http://graphs.grevian.org/examplehttp://www.linuxdevcenter.com/pub/a/linux/2004/05/06/graphviz_dot.html转载于:https://www.cnblogs.com/itzxy/p/7860276.html

两将军问题和TCP三次握手

两将军问题,又被称为两将军悖论、两军问题, 是一个经典的计算机思想实验。首先, 为避免混淆,我们需要认识到两将军问题虽然与拜占庭将军问题相关,但两者不是一个东西。拜占庭将军问题是一个更通用的两将军问题版本&…

微信小程序开发系列五:微信小程序中如何响应用户输入事件

2019独角兽企业重金招聘Python工程师标准>>> 微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 微信小程序开发系列三:微信小程序的调试方法 微信小程序…

理解Object.defineProperty的作用

Object.defineProperty 是vue中双向绑定的基础。vue是通过数据劫持的方式来做数据绑定的,最核心的方法是通过 Object.defineProperty()方法来实现对属性的劫持,达到能监听到数据的变动。要实现数据的双向绑定, 当使用存取器描述属性的特性的时…

java.lang包有哪些类_Java中Lang包的工具类有哪些

Java中Lang包的工具类有哪些发布时间:2020-12-08 16:15:36来源:亿速云阅读:76作者:Leah今天就跟大家聊聊有关Java中Lang包的工具类有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总…

直播修仙:使用.NET 的 WebView2 如何获取请求的响应内容,以微信直播的互动直播为例...

背景近几年直播行业快速发展,门槛也越来越低,越来越的人涌入直播大军。不得不说,直播不仅带来了更多的娱乐消遣,还提供了一个新型的就业方式。说起直播的类型,有一个非常小众的娱乐直播,没有主播&#xff0…

2017年我的阅读书单

2017年我正在看或者已经看完的书单,基本上都是纸质书,主要是长时间阅读也不伤眼。由于现阶段的主要工作是 DevOps 和运维管理,所以涉及运维方面的书我没有再细看,如果是工作用到的话会稍为翻阅下。主要还是看运维开发和 Python 及…

web第6次作业position

position 属性指定了元素的定位类型。 position 属性的五个值: static (静态定位) HTML元素的默认值,即没有定位,元素出现在正常的流中。 静态定位的元素不会受到 top, bottom, left, right影响。 div.stati…

GeneralUpdate版本更新公告20221009

大家好我是juster,GeneralUpdate的开源项目作者。这次将发布GeneralUpdate兼容.NET MAUI和多平台为核心的版本。经过国庆假期的打磨修复了大量开源社区开发者的提交的bug和不合理修改建议,重构、删除了大量代码和结构使用和上一个版本没有太大变化。1.更…

实验2 java_《Java程序设计》实验2

1、使用java语言编程,从键盘输入N个整数存储到数组中,求数组所有元素的和、最大值和平均值。import java.util.Scanner;public class Program01{public static void main(String [] args){Scanner scanner new Scanner(System.in);System.out.println(&…

WPF遍历当前容器中某种控件的方法

原文:WPF遍历当前容器中某种控件的方法版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37591671/article/details/79528845 WPF遍历当前容器中某种控件的方法 WPF遍历当前容器中某种控件的方法1.目的:2.实现思…

gradle 转 maven

1. 预备 1.1. java 环境 验证 java -version   1.2. gradle 安装, 参考, 这里列举下windows下的安装 b.1 下载包:https://gradle.org/releases b.2 解压,例如放到D:\soft\gradle\gradle-3.5 b.3 添加到环境变量, 把D…

详细的DedeCMS(织梦)目录权限安全设置教程

一、目录权限根据统计,绝大部分网站的攻击都在根目录开始的,因此,栏目目录不能设置在根目录。DEDECMS部署完成后,重点目录设置如下:1)将install删除。2) data、templets、uploads、a或html目录,…