《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的发展历史上先后出现了三种应用承载的编程方式,而且后一种编程模式都提供了针对之前编程…

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…

两将军问题和TCP三次握手

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

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

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

理解Object.defineProperty的作用

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

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

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

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.实现思…

善用Object.defineProperty巧妙找到修改某个变量的准确代码位置

2019独角兽企业重金招聘Python工程师标准>>> 我今天的工作又遇到一个难题。前端UI右下角这个按钮被设置为"禁用(disabled)"状态。 这个按钮的可用状态由属性enabled控制。我通过调试发现,一旦下图第88行代码执行完毕之后,这个按钮的…

使用 C# 开发的轻量级开源数据库 LiteDB

你好,这里是 Dotnet 工具箱,定期分享 Dotnet 有趣,实用的工具或组件,希望对您有用!简介 LiteDB 是一个小型、快速、轻量级的 .NET NoSQL 嵌入式数据库,也就是我们常说的 K/V 数据库,完全用 C# …

微信小程序仿微信SlideView组件slide-view

微信小程序仿微信SlideView组件。 使用 1、安装 slide-view 从小程序基础库版本 2.2.1 或以上、及开发者工具 1.02.1808300 或以上开始,小程序支持使用 npm 安装第三方包。 npm install --save miniprogram-slide-view2、在需要使用 slide-view 的页面 page.json 中…

hibernate 环境搭建测试

对于hibernate的介绍,网络上一搜一堆,恐怕我写的也没前辈总结的好。这个博主总结的十分好,方便大家欣赏 http://blog.csdn.net/liujiahan629629/article/details/21442607 真正要掌握,还得需要自己动手,才能丰衣足食。所需jar包j…

C# WPF 中使用 MahApps.Metro.IconPacks 提供的图标

概述我们在桌面应用程序开发时经常会用到很多图标,时常我是在阿里矢量图库下载:https://www.iconfont.cn/,然后存放多项目中去引用,不过这样操作起来有点繁琐,这节我们介绍一个更加便捷的方式.用法概述Wpf 图标管理工具…

java多线程同时运行_Java实现的两个线程同时运行案例

本文实例讲述了Java实现的两个线程同时运行。分享给大家供大家参考,具体如下:/*** 两个案例同时运行案例* 1:这个两个线程并不是有规律的运行而是有没有规律的交替运行*/package com.test3;public class Demo10_3 {/*** param args*/public static void …

dotnet 用 SourceGenerator 源代码生成技术实现中文编程语言

相信有很多伙伴都很喜欢自己造编程语言,在有现代的很多工具链的帮助下,实现一门编程语言,似乎已不是一件十分困难的事情。我利用 SourceGenerator 源代码生成技术实现了一个简易的中文编程语言,核心原理是将中文编程语言翻译为 C#…