JUC-线程的创建、运行与查看

创建和运行线程

Thread创建线程

Thread 创建线程方式:创建线程类,匿名内部类方式

  • start() 方法底层其实是给 CPU 注册当前线程,并且触发 run() 方法执行
  • 线程的启动必须调用 start() 方法,如果线程直接调用 run() 方法,相当于变成了普通类的执行,此时主线程将只有执行该线程
  • 建议线程先创建子线程,主线程的任务放在之后,否则主线程(main)永远是先执行完
public static void main(String[] args) {Thread t = new Thread(){public void run() {for (int i = 0; i < 100; i++) {System.out.println("子线程输出:" + i);}}};t.start();// main线程输出放在start之前,就一定会先输出main线程,因为是 main 线程驱动的子线程运行for (int i = 0; i < 100; i++) {System.out.println("main线程" + i);}
}

使用Runnable

public static void main(String[] args){Runnable r = new Runnable() {@Overridepublic void run() {for (int i = 0; i < 10000; i++) {System.out.println("子线程输出:" + i);}}};Thread t1 = new Thread(r, "t1");t1.start();// 使用lambda表达式Runnable r2 = () -> System.out.println("lambda表达式");Thread t2 = new Thread(r2);t2.start();
}

Runnable 方式的优缺点:

  • 缺点:代码复杂一点。
  • 优点:
    • 线程任务类只是实现了Runnable接口,可以继续继承其他类,避免了单继承的局限性
    • 同一个线程任务对象可以被包装成多个线程对象
    • 适合多个多个线程去共享同一个资源
    • 实现解耦操作,线程任务代码可以被多个线程共享,线程任务代码和线程独立
    • 线程池可以放入实现 Runnable 或 Callable 线程任务对象

查看进程线程的方法

首先我们可以线运行下边的java程序:

package com.qcby.demo1;import lombok.extern.slf4j.Slf4j;@Slf4j
public class Demo2 {public static void main(String[] args) {Runnable r = () -> {while(true){// 如果不想配置日志,就使用System.out.println("正在运行......");log.info("正在运行......");}};Thread t1 = new Thread(r, "t1");Thread t2 = new Thread(r, "t2");t1.start();t2.start();}
}

Windows

  • 任务资源管理器
  • tasklist查看进程
  • taskkill杀死进程
    ![[Pasted image 20240409215935.png]]在这里插入图片描述

使用下面指令可以杀死进程:

taskkill /F /PID 进程id

使用tasklist不太方便找到我们刚刚运行的java程序,我们使用jps来找他

![[Pasted image 20240409221305.png]]

Linux

  • ps -fe查看所有进程
  • ps -fT -p <PID>查看PID进程的所有线程
  • kill <PID>杀死进程
  • top动态的展示所有进程,可以看见cpu的占用情况
  • top -H -p <PID>查看PID进程的所有线程
    ![[Pasted image 20240409231118.png]]

Java

  • jps查看所有java进程
  • jstack <PID>查看某个java进行的所有线程状态(那一刻所有进程的详细状态)
    ![[Pasted image 20240409221505.png]]

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

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

相关文章

设计模式-接口隔离原则

基本介绍 客户端不应该依赖它不需要的接口&#xff0c;即一个类对另一个类的依赖应该建立在最小的接口上先看一张图: 类A通过接口Interface1 依赖类B&#xff0c;类C通过接口Interface1 依赖类D&#xff0c;如果接口Interface1对于类A和类C来说不是最小接口&#xff0c;那么类…

什么是多路复用器滤波器

本章将更深入地介绍多路复用器滤波器&#xff0c;以及它们如何用于各种应用中。您将了解到多路复用器如何帮助设计人员创造出更复杂的无线产品。 了解多路复用器 多路复用器是一组射频(RF)滤波器&#xff0c;它们组合在一起&#xff0c;但不会彼此加载&#xff0c;可以在输出之…

Linux网络名称空间与网络协议栈:区别、联系与理解

在深入探讨Linux网络名称空间和网络协议栈之间的区别和联系之前&#xff0c;重要的是先明确这两个概念的定义。网络名称空间是Linux提供的一种虚拟化技术&#xff0c;允许在同一物理机器上运行的不同进程组拥有独立的网络环境&#x1f3e2;。而网络协议栈是操作系统用于实现网络…

视频图像的两种表示方式YUV与RGB(3)

上篇文章介绍了YUV的采样格式&#xff0c;本篇重点介绍YUV的存储方式。接下来将用图形式给出常见YUV图像的存储方式&#xff0c;并在存储方式后面附有取样每个像素点YUV的数据方法&#xff0c;图中&#xff0c;Cb、Cr的含义等同于U、V。 YUYV为YUV422采样的存储格式中的一种&a…

探索 2024 年最佳编码自定义 GPT

如何利用GPT技术优化您的软件开发流程&#xff1f; 介绍 在快速发展的技术世界中&#xff0c;人工智能 (AI) 已成为创新的基石&#xff0c;特别是在编码和软件开发领域。 改变这一格局的人工智能工具之一是自定义 GPT。 这些先进的模型不仅彻底改变了我们的编码方式&#xff0c…

linux fixmap分析

本文基于Linux-4.19.125&#xff0c; ARM V7&#xff0c;dual core, MMU采用2级页表&#xff08;未开启LPAE&#xff09;。 1 为什么需要fixmap Linux内核启动过程中&#xff0c;经过汇编阶段后&#xff0c;mmu功能已经开启&#xff0c;后续只能通过虚拟地址来访问DDR&#x…

刷题日记——机试(3)

8.约瑟夫问题的实现 分析 创建一个队列和一个计数器&#xff0c;计数器初值为0&#xff0c;判断队列成员数是否为1&#xff0c;如果不是转3&#xff0c;是转6计数器每次1并且对k取余&#xff0c;然后将队首出队如果计数器值为0&#xff0c;那么回到2继续执行&#xff0c;如果不…

2024 年 3 月公链行业研报:比特币创新高、Meme 掀热潮、AI 板块露头角

作者&#xff1a;stellafootprint.network 数据来源&#xff1a;Footprint Analytics 公链研究页面 3 月份&#xff0c;加密市场表现强劲&#xff0c;比特币再创历史新高。以太坊价格稳步攀升&#xff0c;而坎昆升级则显著降低了交易成本。Solana 链上 Meme 热潮席卷而来&am…

【热门话题】 Fiddler:一款强大的Web调试代理工具——安装与使用详解

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 Fiddler&#xff1a;一款强大的Web调试代理工具——安装与使用详解一、Fiddler的…

水位实时监测系统的工作原理

TH-SW3水位实时监测系统有多种应用场景&#xff0c;包括但不限于防汛、水文地质勘察、水资源管理等领域。例如&#xff0c;雷达水位监测站利用雷达微波技术进行水位测量&#xff0c;适用于河流、湖泊、水库等水域;积水监测站则主要使用在低洼地区&#xff0c;为城市内涝治理提供…

ubuntu系统安装k8s1.28精简步骤

目录 一、规划二、环境准备2.1 配置apt仓库配置系统基本软件仓库配置k8s软件仓库安装常用软件包 2.2 修改静态ip、ntp时间同步、主机名、hosts文件、主机免密2.3 内核配置2.4 关闭防火墙、selinux、swap2.5 安装软件安装docker安装containerd安装k8s软件包 三、安装配置k8s3.1 …

二叉树的前序遍历、中序遍历、后序遍历

二叉树的前序遍历、中序遍历、后序遍历 一、递归算法的三个要素二、144. 二叉树的前序遍历三、94. 二叉树的中序遍历四、145. 二叉树的后序遍历 一、递归算法的三个要素 1、确定递归函数的参数和返回值&#xff1a; 确定哪些参数是递归的过程中需要处理的&#xff0c;那么就在…

宁波宠物展|2024中国(宁波)国际宠物用品博览会

中国(宁波)国际宠物用品博览会 地点&#xff1a;宁波国际会展中心 时间&#xff1a;2024年11月14-16日 主办单位:凤麟展览(宁波)有限公司 协办单位:浙江省宠物产业协会 宁波市跨境电子商务协会 宁波欧德国际商务咨询服务有限公司 宁波扬扬会议展览有限公司 20000方展览…

手写简易操作系统(二十八)--实现简单shell

前情提要 Shell是计算机操作系统中的一个重要概念&#xff0c;它是用户与操作系统内核之间的接口。Shell接受用户的命令&#xff0c;并将其转换为操作系统能够理解的指令&#xff0c;然后执行这些指令&#xff0c;并将执行结果返回给用户。 Shell可以理解为一个命令解释器&am…

网络安全之权限维持那点事

权限维持 一旦黑客成功地入侵了目标系统&#xff0c;他们通常会尝试保持对系统的持久访问权&#xff0c;以便继续执行恶意活动&#xff0c;如窃取敏感数据、植入恶意软件、破坏系统功能等。 权限维持的过程可能包括以下几个方面&#xff1a; 后门植入&#xff1a;黑客可能会在…

第十届蓝桥杯大赛个人赛省赛(软件类) CC++ 研究生组-RSA解密

先把p&#xff0c;q求出来 #include<iostream> #include<cmath> using namespace std; typedef long long ll; int main(){ll n 1001733993063167141LL, sqr sqrt(n);for(ll i 2; i < sqr; i){if(n % i 0){printf("%lld ", i);if(i * i ! n) pri…

系统调用接口(如read、write等)是如何实现硬件驱动的?

在ARM架构中&#xff0c;软件控制硬件通常通过操作系统内核和设备驱动程序来实现。 1. **操作系统内核&#xff1a;** 操作系统内核是系统的核心软件&#xff0c;负责管理系统资源、提供服务以及调度任务。在ARM架构中&#xff0c;操作系统内核负责管理软件与硬件之间的交互。…

xss.pwnfunction-Ah That‘s Hawt

<svg/onloadalert%26%2340%3B1%26%2341%3B> <svg/>是一个自闭合形式 &#xff0c;当页面或元素加载完成时&#xff0c;onload 事件会被触发&#xff0c;从而可以执行相应的 JavaScript 函数

harmonyOS安装ohpm

下载 下载地址 HUAWEI DevEco Studio和SDK下载和升级 | 华为开发者联盟 初始化 注意&#xff1a;初始化ohpm前&#xff0c;需先完成node.js环境变量配置 1.解压文件&#xff0c;进入commandline-tools-windows-2.0.0.2\command-line-tools\ohpm\bin 2.执行&#xff1a; init.ba…

《论文阅读》构建情感共识并利用未配对数据生成共情对话 ACL 2021

《论文阅读》构建情感共识并利用未配对数据生成共情对话 ACL 2021 前言简介模型构架损失函数实验结果前言 亲身阅读感受分享,细节画图解释,再也不用担心看不懂论文啦~ 无抄袭,无复制,纯手工敲击键盘~ 今天为大家带来的是《Constructing Emotion Consensus and Utilizing …