<JavaEE> 线程的五种创建方法 和 查看线程的两种方式

news2025/2/23 10:44:22

目录

一、线程的创建方法

1.1 继承 Thread -> 重写 run 方法

1.2 使用匿名内部类 -> 继承 Thread -> 重写 run 方法

1.3 实现 Runnable 接口 -> 重写 run 方法

1.4 使用匿名内部类 -> 实现 Runnable 接口 -> 重写 run 方法

1.5 使用 lambda 表达式

二、查看线程的方法

2.1 jconsole 工具

2.2 IDEA Debug 调试器


一、线程的创建方法

以下分别介绍五种线程的创建方法

1继承 Thread -> 重写 run 方法
2使用匿名内部类 -> 继承 Thread -> 重写 run 方法
3实现 Runnable 接口 -> 重写 run 方法
4使用匿名内部类 -> 实现 Runnable 接口 -> 重写 run 方法
5使用 lambda 表达式

        这五种创建方式都是等价的。

1.1 继承 Thread -> 重写 run 方法

//1.创建自己的线程类并继承Thread;
//2.重写run方法;
//3.创建Thread实例;
//4.运行MyThread线程;
class MyThread extends Thread{
    @Override
    public void run() {
        while (true){
            System.out.println("MyThread!");
        }
    }
}
public class Thread_Demo1 {
    public static void main(String[] args) {
        Thread thread = new MyThread();
        thread.start();

        while (true){
            System.out.println("main!");
        }
    }
}

1.2 使用匿名内部类 -> 继承 Thread -> 重写 run 方法

//1.以匿名内部类的方式创建一个继承于Thread的子类,重写run方法;
//2.变量名thread指向这个子类的实例;
//3.启动线程thread;
public class Thread_Demo3 {
    public static void main(String[] args) {
        Thread thread = new Thread(){
            @Override
            public void run() {
                while (true){
                    System.out.println("MyThread!");
                }
            }
        };
        thread.start();

        while (true){
            System.out.println("main!");
        }
    }
}

1.3 实现 Runnable 接口 -> 重写 run 方法

//1.创建一个类,实现Runnable接口;
//2.重写run方法;
//3.实现Runnable接口的子类实例化;
//4.将runnable作为参数,构造Thread类实例;
//5.启动线程thread;
class MyThread implements Runnable{
    @Override
    public void run() {
        while (true){
            System.out.println("MyThread!");
        }
    }
}
public class Tread_Demo2 {
    public static void main(String[] args) {
        Runnable runnable = new MyThread();
        Thread thread = new Thread(runnable);
        thread.start();

        while (true){
            System.out.println("main!");
        }
    }
}

1.4 使用匿名内部类 -> 实现 Runnable 接口 -> 重写 run 方法

//1.以匿名内部类的方式创建一个实现了runnable接口的类,重写run方法;
//2.把这个实现类作为Thread的构造方法的参数,创建Thread对象;
//3.启动线程thread;
public class Thread_Demo4 {
    public static void main(String[] args) {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                while (true){
                    System.out.println("MyThread!");
                }
            }
        });

        while (true){
            System.out.println("main!");
        }
    }
}

1.5 使用 lambda 表达式

//1.使用lambda表达式作为参数构造Thread实例;
//2.重新写run方法,这里的run方法是一个匿名函数;
//3.启动线程thread;
public class Thread_Demo5 {
    public static void main(String[] args) {
        Thread thread = new Thread(()-> {
            while (true){
                System.out.println("MyThread!");
            }
        });
        thread.start();

        while (true){
            System.out.println("main!");
        }
    }
}

二、查看线程的方法

以下介绍两种查看线程的方法:

1通过JDK自带工具 jconsole 查看
2通过 IDEA Debug调试器 查看

        查看线程时,必须保证线程是在运行中的。

2.1 jconsole 工具

找到 jconsole 工具:

jconsole 工具的路径:在JDK安装路径下的bin文件夹下。
如何找到JDK:确保已经安装过JDK,在命令行窗口中输入:java -verbose 后,输出的的第一行就包含了路径:

打开 jconsole 工具:

使用管理员权限下打开,否则打开后选项可能为空白。
找到本地进程中的Java进程。
进程的名字通常由包名+类名组成,是程序员自己取的名字,双击进入。

找到线程选项卡,查看线程:

2.2 IDEA Debug 调试器


阅读指针 -> 《线程类 Thread 的常见方法和属性》

链接生成中.........

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

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

相关文章

Redis面试题:redis做为缓存,数据的持久化是怎么做的?两种持久化方式有什么区别呢?这两种方式,哪种恢复的比较快呢?

目录 面试官:redis做为缓存,数据的持久化是怎么做的? 面试官:这两种持久化方式有什么区别呢? 面试官:这两种方式,哪种恢复的比较快呢? 面试官:redis做为缓存&#xff…

Element-Plus 图标自动导入

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…

【RTP】RTPSenderAudio::SendAudio

RTPSenderAudio 可以将一个opus帧封装为rtp包进行发送,以下是其过程:RTPSenderAudio::SendAudio :只需要提供payload部分 创建RtpPacketToSend 并写入各个部分 填充payload部分 sender 本身分配全session唯一的twcc序号 if (!rtp_sender_->

终端移动性管理

联系前面所学的知识我们知道,移动性管理主要分为两大类:空闲状态下的移动性管理、连接状态下的移动性管理。我们今天来详细了解他们的工作原理~ 目录 移动性管理分类 1、空闲状态下的移动性管理 2、连接状态下的移动性管理 手机选择天线的原则 4G天…

香港站群服务器中1C/2C/4C/8C 的概念及区别

​  在选择香港站群服务器时,经常会看到1C、2C、4C和8C等不同的IP段。这些IP段代表了不同的子网掩码长度,也反映了服务器的IP地址数量和丰富性。 让我们来了解一下什么是IP段。IP段是指一组连续的IP地址,其中每个地址的前三个数字相同&…

从0到0.01入门 Webpack| 006.精选 Webpack面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

在 Go 中使用 Protocol Buffers

各位准备好了吗!这一次,我们将深入探讨 Protocol Buffers(protobuf)及其在数据序列化中的超能力所在。 介绍 Protocol Buffers,也被称为 protobuf,是由谷歌开发的一种语言无关的二进制序列化格式。其主要…

牛客 算法 HJ103 Redraiment的走法 golang语言实现

题目 HJ103 Redraiment的走法 实现 package mainimport ("bufio""fmt""os""strconv""strings" )func main() {scanner : bufio.NewScanner(os.Stdin)nums : make([]int, 0)nums_len:0dp:make([]int, 0)for scanner.Scan()…

2023金盾杯线上赛-AGRT战队-WP

目录 WEB ApeCoin get_source ezupload easyphp MISC 来都来了 芙宁娜 Honor Crypto 我看看谁还不会RSA hakiehs babyrsa PWN sign-format RE Re1 WEB ApeCoin 扫描发现有源码泄露,访问www.tar.gz得到源码。 在源码中发现了冰蝎马。 Md5解码&am…

常见位运算的详讲!

今日为大家详细讲解一番关于常见位运算的操作,本文主要介绍一些位运算的操作符,然后再通过简单->中等->困难的例题,让大家彻底搞懂关于位运算的知识! 位运算的介绍! 1.基础位运算 ">>"右移操作…

c语言练习12周(6~10)

以下程序调用递归函数fun实现求n!,请补充代码。 题干以下程序调用递归函数fun实现求n!,请补充代码。 int fun(int n) { int c; /****************/ /****************/ else cn*fun(n-1); …

1.3 取反器和8位取反器

取反器真值表: 取反开关输入输出011000110101 取反器相当于一个异或门 8位取反器

Canvas艺术之旅:探索锚点抠图的无限可能

说在前面 在日常的图片处理中,我们经常会遇到需要抠图的情况,无论是为了美化照片、制作海报,还是进行图片合成。抠图对于我们来说也是一种很常用的功能了,今天就让我们一起来看下怎么使用canvas来实现一个锚点抠图功能。 效果展示…

从0到0.01入门 Webpack| 005.精选 Webpack面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

【c++】——类和对象(下) ——内存管理

作者:chlorine 专栏:c专栏 目录 💻 C/C内存分布 💻C语言中动态内存管理方式:malloc/calloc/realloc/free ​编辑 💻C内存管理方式 👉new/delete操作内置类型 👉new和delete操作自定义类型 &#x1f…

巧妙解决接口测试产生脏数据问题

测试数据创建后需要对其删除,不然可能产生脏数据,对开发和测试、生产环境造成一定影响。 其接口框架是基于Python,API规范基于REST。 产生原因 改进前:清除资源的操作放在每个正向测试用例里,没有在setUp和tearDown…

战地5无限序章(无法保存)的解决办法

启动游戏后,目录就会自动变成这样了,也不会无限循环了!

QT自定义控件: QLineEdit设置密码可见性选择的三种方式(小眼睛样式)

一、重写QLineEdit提升控件(最好用) 代码中创建了PasswordLineEdit的自定义类,该类继承自QLineEdit。这个自定义类添加了一个QPushButton,用于切换密码的可见性。 实现步骤: 在构造函数中,创建了一个 QPushButton 对象 toggleButton 作为切换密码可见性的按钮,并设置了…

柑橘病害数据集(四类图像分类,没有打yolo标签)

1.文件夹分为训练集和测试集 在这个数据集中,有一类是新鲜柑橘,还有另外三种疾病,溃疡病、黑斑病和绿化病。 2.train文件夹 2.1.blackspot(黑斑病) 文件夹 206张照片 2.2.canker(溃疡病) 文…

cesium轨迹线(图片轨迹线)

cesium轨迹线(图片轨迹线) 下面有源码 实现思路 使用ellipse方法加载圆型,修改polyline中‘material’方法重写glsl来实现当前效果(cesium版本1.109) 示例代码 index.html <!DOCTYPE html> <html lang="en"><head