VisualVM里面的Threads线程界面各种状态对应的Java代码

写一个示例代码,把几种常见的情况都开一个线程运行

package cn.oopeak.juc.juc1;import cn.hutool.core.thread.ThreadUtil;import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.LockSupport;
import java.util.concurrent.locks.ReentrantLock;/*** @author fhf* @since 2024/7/5*/
public class VisualVMThreadStatus {public static void main(String[] args) {VisualVMThreadStatus visualVMThreadStatus = new VisualVMThreadStatus();// 创建线程,但是不调用startvisualVMThreadStatus.create();// 调用sleep方法休眠visualVMThreadStatus.sleep();// 调用wait方法visualVMThreadStatus.callWait();// 调用wait(timeout)方法visualVMThreadStatus.callWaitTimeOut();// 同步代码块里面,一个能拿到锁,一个拿不到阻塞visualVMThreadStatus.sync();// juc包中的可重入锁,让线程lock拿不到锁visualVMThreadStatus.juc();// 调用LockSupper.park方法visualVMThreadStatus.lockSupport();for (; ; ) ;}private void create() {new Thread(() -> {for (; ; ) ;}, "1-start");}public void sleep() {new Thread(() -> {try {TimeUnit.DAYS.sleep(1);} catch (InterruptedException e) {throw new RuntimeException(e);}}, "2-sleep").start();}public void callWait() {new Thread(() -> {synchronized (this) {try {wait();} catch (InterruptedException e) {throw new RuntimeException(e);}}}, "3-wait").start();}public void callWaitTimeOut() {new Thread(() -> {synchronized (this) {try {wait(1000000);} catch (InterruptedException e) {throw new RuntimeException(e);}}}, "4-wait-timeout").start();}public void sync() {Object lock = new Object();new Thread(() -> {synchronized (lock) {for (; ; ) ;}}, "5-synchronized持有锁").start();ThreadUtil.sleep(100);new Thread(() -> {synchronized (lock) {System.out.println("t-synchronized等待锁");}}, "6-synchronized等待锁").start();}public void juc() {ReentrantLock r = new ReentrantLock();// 先占用锁r.lock();new Thread(() -> {// 这里就拿不到了r.lock();}, "7-juc-lock").start();}public void lockSupport() {new Thread(() -> {LockSupport.park();}, "8-lockSupport").start();}
}

按照上面的代码运行结果,查看VisualVM里面的线程可以得出以下结论:

  1. 新建一个线程,但是不调用start方法不会显示在列表中;
  2. 正常执行代码的线程,显示的是Running(运行)状态;
  3. 调用线程的sleep方法,显示的是Sleep(休眠)状态;
  4. 调用wait()方法和调用wait(timeout),显示的是Wait(等待)状态;
  5. 执行synchronized代码块(synchronized方法也一样)如果获取到了锁,显示的是Running运行状态;如果未获取到锁,显示的是Monitor(监视)状态。Monitor状态其实就是阻塞状态;
  6. 调用juc包下的ReentrantLock类的lock方法,未拿到锁的情况下,会显示Park(驻留)状态;
  7. 调用LockSupport.park()方法,会显示Park(驻留)状态。

在这里插入图片描述
我这个VisualVM是官网下载的新版,这个界面和java8自带的差别在于Monitor监视器的颜色,旧版的颜色在一些低质量显示器上还真的和park的颜色分不清
旧的截图:
在这里插入图片描述

线程转储中线程的状态

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

Swagger的原理及应用详解(六)

本系列文章简介: 在当今快速发展的软件开发领域,特别是随着微服务架构和前后端分离开发模式的普及,API(Application Programming Interface,应用程序编程接口)的设计与管理变得愈发重要。一个清晰、准确且易于理解的API文档不仅能够提升开发效率,还能促进前后端开发者之…

大模型时代的蓝海任务,GPT4V准确率不足10%,港科大发布指代理解基准RefCOCO

谈到多模态大模型的应用场景,除了生成任务以外,应用最广泛的可能就是在图像和视频中进行目标检测。 目标检测要求从图像中识别并标注出所有感兴趣的对象,并给每个对象分配一个类别标签。典型的目标检测方法会生成边界框,标记出图…

【js面试题】js的数据结构

面试题:说说你了解的js数据结构 JavaScript中的数据结构是编程的基础,它们帮助我们以高效的方式存储和操作数据。 下面将详细介绍 这些数据结构的来源、概念和应用场景。 数组 Array 来源: 数组是一种线性数据结构,起源于计算…

青岛外贸建站公司wordpress网站模板

电子数码wordpress网站模板 电子数码wordpress网站模板,做数码电子的生产厂家或外贸公司官方网站模板。 https://www.jianzhanpress.com/?p3161 金属不锈钢wordpress外贸主题 适合从事金属不锈钢生产、加式或做外贸的公司,简洁wordpress外贸主题模板…

Mojo入门案例教程(上手篇)

以下是 Mojo 编程语言入门案例教程,内容包括 Mojo 的基本概念、变量、控制结构、函数等方面: Mojo 的基本概念 1.什么是 Mojo?:Mojo 是一种函数式编程语言,用于开发小型应用程序、脚本和工具。 2.Mojo 的特点&#x…

Linux走进网络

走进网络之网络解析 目录 走进网络之网络解析 一、认识计算机 1.计算机的发展 2.传输介质 3.客户端与服务器端的概念 交换机 路由器 二、计算机通信与协议 1. 协议的标准化 2. 数据包的传输过程 OSI 协议 ARP协议 3. TCP/IP:四层模型 4. TCP三次握手和四次挥手…

ElasticSearch常用操作

1、java-api SearchRequest request new SearchRequest(index);// 构建一个SearchSourceBuilderSearchSourceBuilder searchSourceBuilder new SearchSourceBuilder();// 添加查询条件BoolQueryBuilder boolQueryBuilder QueryBuilders.boolQuery();if(StringUtils.isNotBla…

BUG: npm error `electron_mirror` is not a valid npm option

npm error electron_mirror is not a valid npm option 环境 windows 11 node v20.15.0 npm v10.7.0详情 在运行 npm run mirror 命令时出现错误。这是一个设置镜像的命令。 我是没事干了,运行这个命令,这个命令在我这里根本就是运行不了。这个命令一…

大数据平台之购买还是自建

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: 欢迎关注微信公众号:野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&a…

协程libgo的使用

c开源协程库libgo介绍及使用-CSDN博客 libgo库的github地址:GitHub - yyzybb537/libgo: Go-style concurrency in C11 使用libgo编写并行程序,即可以像golang一样开发迅速且逻辑简洁,又有C原生的性能优势。它的特点有: 1.提供go…

自定义控件三部曲之绘图篇(六)Paint之函数大汇总、ColorMatrix与滤镜效果、setColorFilter

在自定义控件的绘图篇中,Paint 类是核心的组成部分之一,它控制了在 Canvas 上绘制的内容的各种属性,包括颜色、风格、抗锯齿、透明度等等。下面将详细介绍 Paint 的主要功能以及如何使用 ColorMatrix 和 setColorFilter 来实现滤镜效果。 Pa…

Vue2前端实现数据可视化大屏全局自适应 Vue实现所有页面自适应 Vue实现自适应所有屏幕

Vue自适应所有屏幕大小,目前页面自适应,尤其是数据可视化大屏的自适应更是案例很多 今天就记录一下使用Vue全局自适应各种屏幕大小的功能 在Vue.js中创建一个数据大屏,并使其能够自适应不同屏幕大小,通常涉及到布局的响应式设计、CSS媒体查询、以及利用Vue的事件系统来处理…

【matlab】【python】爬虫实战

目录 引言 具体步骤 1.设置请求选项 2.发送请求并获取响应 3.设置正则表达式 4.执行正则表达式匹配 matlab完整代码 python代码示例 引言 在当今这个信息爆炸的时代,数据已成为推动社会进步和企业发展的核心动力之一。随着互联网的普及和技术的飞速发展&am…

Why Can’t Robots Click The “I’m Not a Robot” Box On Websites?

Clicking a tiny box tells Google all they need to know about your humanity 你好,我是 Jiabcdefh。 if you’ve browsed the internet for any amount of time, you will likely come across a reCAPTCHA box. These boxes appear when you first enter certain websites…

RIP环境下的MGRE网络

首先将LSP的IP地址进行配置 其他端口也进行同样的配置 将serial3/0/1配置25.0.0.2 24 将serial4/0/0配置35.0.0.2 24 将GE0/0/0配置45.0.0.2 24 进行第二步 R1与R5之间使用ppp的pap认证 在R5中进行配置 在aaa空间中创建账号和密码 将这个账号和密码使用在ppp协议中 然后…

用XDR的思路保护API安全

云计算飞速发展的今天,越来越多应用程序已经转为选择云原生架构,这就少不了Serverless、微服务、API等技术的协助。 但同时也有越来越多的企业认识到,一定程度的“API安全”在整体安全与合规态势中发挥着至关重要的作用。然而,对…

【LLM】二、python调用本地的ollama部署的大模型

系列文章目录 往期文章: 【LLM】一、利用ollama本地部署大模型 目录 文章目录 前言 一、ollama库调用 二、langchain调用 三、requests调用 四、相关参数说明: 总结 前言 本地部署了大模型,下一步任务便是如何调用的问题&#xff0c…

2.硬盘和内存区别

2.2 磁盘比内存慢几万倍? 存储器方面的设备,分类比较多,那我们肯定不能只买一种存储器,比如你除了要买内存,还要买硬盘,而针对硬盘我们还可以选择是固态硬盘还是机械硬盘。 相信大家都知道内存和硬盘都属…

使用 Hugging Face 模型时遇到的问题

题意: I load a float32 Hugging Face model, cast it to float16, and save it. How can I load it as float16? 我加载了一个float32的Hugging Face模型,将其转换为float16,并保存了。我该如何以float16的形式加载它呢? 问题…

cmake组织C++工程

前提 之前写一个C工程时,使用的是cmake对整个工程进行管理。这里将工程模板做个简单的记录。里面使用的CMake相关命令,可以查看我写的这篇CMake命令介绍博客。 正文 这是我们的工程目录: CppProject ├── CMakeLists.txt ├── includ…