【Day21】Java线程(创建线程的两种方法)

Java 21 迁移指南:掌握从 Java 8 升级的方法 Java 领域持续演进,每个版本在性能、语言特性和安全性方面都取得了显著提升。Java 21 的迁移是一次重大飞跃,它使开发人员能够利用最新的改进并相应地优化其应用程序。本指南深入探讨了此次迁移的技术历程,重点介绍了高级开发人员和项目负责人的战略优势和重要注意事项。它提供了一份全面的路线图,可帮助您有效地完成更新过程并充分利用 Java 21 的功能。 阅读详情

目录

方式一:继承Thread

步骤:

例题1:遍历1-100以内所有偶数

 方式二:实现Runnable接口

步骤:

比较创建线程的两种方式 开发中:优先选择:实现Runnable接口的方式 原因:1、实现的方式没有的类的单继承性的局限性      2、实现的方式更适合来处理多个线程有共享数据的情况

例二:创建三个窗口,总票数为100张

方式一:继承Thread

步骤:

/**
*多线程的创建,方式一:继承Thread
 * 1、创建一个继承与Thread的子类
 * 2、重写Thread的run()方法------>将线程执行的操作声明在方法内
 * 3、创建Thread类的对象
 * 4、同构此对象调用start();
* @author: ----千里之行,始于足下----
* date: 2022/8/11 18:33
* @since JDK 1.8
*/

例题1:遍历1-100以内所有偶数

public class Test1 extends Thread{
//  重写Thread的run方法
    @Override
    public void run() {
        for(int i=1;i<=100;i++){
            if(i%2==0){
                System.out.println(i);
            }
        }
    }

    static class Test2 {
        public static void main(String[] args) {
            Test1 te1 = new Test1();
    //        start的作用①启动线程,②调用当前线程的run()方法
            te1.start();
    //        不能直接调用run()方法的方式启动线程
    //        te.run();
    //        如果再次使用start启动线程,会出行异常:IllegalThreadStateException
    //        te1.start();
    //        若想使用多个线程需要新造对象
            Test1 te2 = new Test1();
            te2.start();

    //        如下操作依然在main线程里执行
            for (int i = 0; i < 100; i++) {
                if (i % 2 != 0) {
                    System.out.println(i + "***************");
                }
            }
        }
    }
}

 方式二:实现Runnable接口

步骤:

/**
 *创建多线程的方式二:实现Runnable接口
 * 1、创建一个实现Runnable接口的类
 * 2、实现类去实现Runnable中的抽象方法:run()
 * 3、创建实现类的对象
 * 4、将此对象作为参数传递到Thread类的构造其中,创建Thread类的对象
 * 5、通过Thread类的对象调用start()
 *
 * 联系:public class Thread implements Runnable
 * 相同点:两种方式都需要重写run(),将线程要执行的逻辑声明在run()中。
*/
class MyThread implements Runnable{
//   重写Runnable的方法
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            if(i%2==0){
//                Thread.currentThread().getName():表示调用当前方法的线程名
                System.out.println(Thread.currentThread().getName()+"--"+i);
            }else {
                break;
            }
        }
    }
}
public class Test4 {
    public static void main(String[] args) {
        MyThread myThread=new MyThread();
//        t1是线程,创建多线程时,只需要new Thread();就行
        Thread t1 =new Thread(myThread);
        Thread t2 =new Thread(myThread);
//        ①启动线程
//        ②调用当前线程的run()-->调用了Runnable类型的target的run()
//        ③setName:设置线程名
        t1.setName("线程一");
        t1.start();
        t2.setName("线程二");
        t2.start();
    }
}

比较创建线程的两种方式
开发中:优先选择:实现Runnable接口的方式
原因:1、实现的方式没有的类的单继承性的局限性
      2、实现的方式更适合来处理多个线程有共享数据的情况
 

例二:创建三个窗口,总票数为100张

/**
* Description:
 *
 *例子:
 *
* @author: ----千里之行,始于足下----
* date: 2022/8/11 20:26
* @since JDK 1.8
*/


class Window extends Thread{
    private static int ticket = 100;

    @Override
    public void run() {
        while (true){
            if(ticket > 0){
//                getName:表示当前线程名,完整写法:this.getName()
                System.out.println(getName()+"卖票,票票数还有:"+ticket);
                ticket--;
            }else {
                break;
            }
        }
    }
    public static class WindowTest {
        public static void main(String[] args) {
            Demo1.Window t1 = new Demo1.Window();
            Demo1.Window t2 = new Demo1.Window();
            Demo1.Window t3 = new Demo1.Window();
            t1.setName("窗口一");
            t1.start();
            t2.setName("窗口二");
            t2.start();
            t3.setName("窗口三");
            t3.start();

        }
    }
}

 

JDK21深度解密 Day 2:虚拟线程入门与基础应用 虚拟线程的核心优势:极低内存占用(1KB vs 1MB)、百万级并发能力、结构化并发API实战应用技巧:三种创建方式、性能测试对比、Spring Boot集成方案迁移策略:ExecutorService替代方案、兼容性保障措施最佳实践:StructuredTaskScope管理并发、性能监控与调优、常见陷阱规避OpenJDK Loom官方文档《Java并发编程实战》第四版(即将发布,含虚拟线程章节)Reactive Streams与虚拟线程对比研究JDK21性能白皮书。 阅读详情

相关推荐

JDK21深度解密 Day 8:Spring Boot 3与虚拟线程整合

JDK21引入的虚拟线程(Virtual Threads)是Loom项目的核心成果之一,标志着Java并发模型的一次重大革新。内存占用更低:每个虚拟线程仅占用KB级栈空间,而传统线程通常需要MB级。创建成本极低:创建数万个虚拟线程几乎无延迟,适合高并发场景。调度效率更高:由JVM管理调度,减少操作系统内核切换开销。虚拟线程基于Continuation模型实现,其核心在于用户态协程调度,避免了频繁的上下文切换和资源竞争问题。这种设计使得单台服务器可以轻松支持百万级并发连接。

在未来等你的专栏 765

多线程学习

多线程

卡卡罗特 335

FreeSWITCH实战:5分钟搞定阿里云SDM(MRCP-SERVER)语音机器人搭建(含Docker部署技巧)

本文详细介绍了如何利用FreeSWITCH与阿里云SDM(MRCP-SERVER)快速搭建高可用语音机器人,包括Docker部署技巧、系统调优及高可用架构设计。通过实战案例和优化建议,帮助开发者5分钟内完成部署,提升语音交互系统的性能和稳定性。

stone的博客 505

关于线程和进程的学习记录

一个Java应用程序java.exe,其实至少有三个线程:main()主线程,gc()垃圾回收线程,异常处理线程。当然如果发生异常,会影响主线程。 1、单核和多核指的是CPU:CPU类似于大脑一样,是负责运算和处理的,而内存是交换数据的。 程序或操作者对CPU发出指令,指令和数据内存暂存到内存中,CPU空闲传送给CPU,CPU处理之后把结果输出到输出设备上。 2、程序顺序为:用户程序发出指令->CPU->暂存内存—I/O设备–>输入设备----->CPU空闲---->CPU处

日常分享学习的轨迹 236

C++控制台实现简单的注册登录

C++控制台实现简单的注册登录 #include<iostream> #include<string> #include <vector> #include <conio.h> void Display();//调用display显示switch()界面 void Register();//注册 void Enter();//登录 using nam...

乔路非 2万+

磁传感器技术解析:从霍尔效应到车规级应用,纳芯微的本土第一之路

磁传感器是现代工业与汽车电子中的关键感知元件,其技术演进经历了从分立器件到高集成度SoC的跨越。霍尔效应与磁阻效应构成两大物理基础,其中硅基霍尔方案凭借高性价比与成熟供应链,在车规级应用中占据主流。高精度电流检测、角度与位置感知、磁开关等场景,对传感器的温漂抑制、共模瞬态抗扰与批量一致性提出严苛要求。车规级可靠性体系与系统级集成能力,成为衡量供应商的核心标尺。随着新能源主驱、光伏逆变、工业伺服等应用爆发,具备完整信号链与隔离技术积累的厂商正逐步构建护城河。本文以纳芯微为样本,剖析其从隔离技术延伸至磁传感器平

weixin_34387468的博客 365

【Java】:简单说说线程的两种创建方式

第一种: 继承Thread重写run方法 优点:简单,直接,在使用匿名内部类创建线程时常用到; 缺点: 1)由于Java是单继承,这导致我们继承Thread后就无法继承其他类来重用方法,实际开发中不方便。 2)重写run方法会导致将线程要执行的任务定义在了线程中,任务与线程存在必然耦合关系,不利于线程的重用。 package thread; public class ThreadD...

源僧 411

spark3.x 写入hudi报错

【代码】spark3.x 写入hudi报错。

W2484980893的博客 1578

线程创建的三种方式和线程池创建的四种方式

线程创建的方式和区别 1.继承Thread类 (1)创建Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。 (2)创建了Thread子类的实例,即创建了线程对象。 (3)调用线程对象的start()方法来启动该线程。 package com.thread; public class Thread01 { public static void main(String[] args) { MyThread01 t

chaochao2113的博客 1万+

FreeCAD地下管道自动化建模实战:Python脚本从入门到导出OBJ

本文详细介绍了如何利用FreeCAD的Python API实现地下管道的自动化建模,从数据处理到模型导出OBJ格式的全流程。通过实战案例和代码示例,展示了圆形和矩形截面管道的创建方法,以及法兰连接等特殊处理技巧,大幅提升工程设计效率。

ff678的博客 249

手把手教你用开源EtherCAT协议栈SOEM开发从站设备(附避坑指南)

本文详细介绍了如何使用开源EtherCAT从站协议栈SOES进行嵌入式设备开发。内容涵盖从环境搭建、硬件准备到核心的对象字典与PDO映射配置,并重点分享了主循环集成、状态机处理以及实战调试中的常见问题与避坑指南,旨在帮助开发者高效实现设备接入工业现场总线网络。

linux的博客 630

进程的并发执行(入门)

1、实现多线程 1.1 进程 进程:是正在运行的程序,是系统进行资源分配和调用的独立单位 每一个进程都有它自己的内存空间和系统资源 1.2 线程 线程:是进程中的单个顺序控制流,是一条执行路径 单线程:一个进程如果只有一条执行路径,则称为单线程程序 多线程:一个进程如果有多条执行路径,则称为多线程程序 1.3 多线程的实现方式 方式1:继承Thread类 定义一个类MyThread...

dfy20505的博客 1976

95.qt qml-诺谦通用可扩展多功能QML界面

如下图所示:自带一个功能界面,可以通过功能界面添加不同功能,并且可以固定到顶部水平导航栏中,对于N多小功能的项目而言,非常方便,这样用户就可以根据自己喜好来使用自己常用的功能了。

抵抗时间扭曲,坚持做一件有意义的事 3048

多线程怎么保证数据安全_「软帝学院」Java挑战者专栏:多线程详解2

软帝学院笔记Day21多线程(单例设计模式)(掌握)单例设计模式:保证类在内存中只有一个对象。如何保证类在内存中只有一个对象呢?(1)控制类的创建,不让其他类来创建本类的对象。private(2)在本类中定义一个本类的对象。Singleton s;(3)提供公共的访问方式。 public static Singleton getInstance(){return s}单例写法两种:(1)饿汉式 开...

weixin_39635373的博客 112

YOLO26训练教程,训练自己的数据集教学,从源码下载,配置虚拟环境,准备数据集、训练、验证、推理测试 。实现0到1的完整教学过程。快速入门必看

本文详细介绍了YOLO26目标检测模型的配置与使用流程:1)下载YOLOv11源码并创建Python3.10虚拟环境;2)安装PyTorch2.5.1及相关依赖库;3)准备数据集并修改配置文件;4)编写训练脚本设置参数(640x640分辨率、500轮次);5)验证模型效果;6)使用训练好的模型进行推理测试;7)生成可视化热力图。整个过程涵盖了从环境搭建到模型应用的全流程,并提供了清华镜像源加速下载。

Ai缝合怪、助力小伙伴高效发论文 5293

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java学习day22:进程和线程、并发并行、线程创建方式(知识点详解)

Java学习day22:进程线程、并发并行、线程创建方式 一、进程和线程 1.什么是进程 是独立的运行程序,比如咱们电脑软件,你启动起来以后,他就是一个进程。qq idea 进程需要windows系统的分配。可以获取当前的系统的网卡,内存,显卡等

LF__plus的博客 1570

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java基础21 多线程线程两种实现方式 锁

多线程的概念 1.程序 :一个固定逻辑与数据的集合 就称为程序 例如淘宝 贪吃蛇小游戏 2.CPU: 中央处理器 主要用于协调程序与硬件进行配置的工作 3.并发与并行 1.并发(高并发) 在同一个时间段 执行两个或者多个任务 单核cpu 是进行相互切换 执行某一个任务 切换速度是非常快 很容易误解是同时执行的 其实是交替执行 2.并行 在同一时刻 执行两个或者是多个任务的时候 多核cpu是同时执行多个任务 同时执行 目前的电脑都是使用多核 例子: 可以听歌 敲代码 看视频 1.进程: 运行在内存中的程序

Xs943的博客 1228

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java阶段一Day21

今天是学习Java阶段一的第二十一天,今天主要讲了有关多线程的知识,了解了线程和进程的关系,和一些常见的线程信息相关方法,包括线程的生命周期,阻塞和守护线程等

今天你学Java了吗 698

day21--多线程

首先,什么是线程安全问题呢?线程安全问题指的是,多个线程同时操作同一个共享资源的时候,可能会出现业务安全问题。下面通过一个取钱的案例给同学们演示一下。案例需求如下场景:小明和小红是一对夫妻,他们有一个共享账户,余额是10万元,小红和小明同时来取钱,并且2人各自都在取钱10万元,可能出现什么问题呢?如下图所示,小明和小红假设都是一个线程,本类每个线程都应该执行完三步操作,才算是完成的取钱的操作。但是真实执行过程可能是下面这样子的。

ZHUSHANGLIN的博客 794

Day21 多线程

1.多线程 1.1 程序,进程,线程 程序:一组命令的集合,为了完成指定的功能,程序是静态概念,一般保存在硬盘当中 进程:正在运行的程序,是一个动态概念,需要保存在内存当中,操作系统会分配对应的PID,当我们直接关闭某个进程的时候,该进行会在运行内存中被销毁 线程:一个程序中,不同的执行分支,如果同一个时间节点允许多个线程同时执行的时候,我们成为支持多线程 在java中,main方法开始执行,就是一个线程,成为主线程 1.2 并行和并发 并行:多个CPU,同时执行多个任务 并发:一个CPU,同时执行多个任务

Poissoner的博客 210

尚硅谷 java 学习 (b 站版)Day21、多线程

多线程的相关基础知识

qq_46648403的博客 1098

Day 20 03.21 线程 线程同步

Day 20 0321 hashMap和hashtable的区别 1、两者在api的操作上基本上一样,没有太大的区别 2、hashMap允许空键空值(null键只能出现一次),hashtable不允许出现null键null值 3、hashMap线程不安全,hashTable线程安全 4、Hashmap效率高些,hashtable更低 treeMap 红黑算法 entry key value l...

Theniceday_99的博客 342

Day 21 多线程和多线程同步

Day 21 1. 多线程 1.1 优缺点 优点 提升资源利用率 提高用户体验 缺点 降低了其他线程执行概率 用户会感受到软件的卡顿 增加了系统资源压力 多线程情况下的共享资源问题,线程冲突,线程安全问题 1.2 创建自定义线程类的两种方式 class Thread类 Java中的线程类 Runnable接口的实现类,同时提供了很多线程的操作使用方法 interface Run...

m0_37771142的博客 520

Day 21 线程 & 锁

start()---->开启线程的的方法,底层依赖于start0()—被native修饰:非Java语言实现(本地方法—跟系统相关的)throws InterruptedException。需要解决------------------>“Java的同步机制 synchronized 同步锁”,使用同步代码块解决。线程的优先级越大,只能说明它抢占到CPU的执行权的几率越大,但是不一定,因为线程的执行具有随机性!但是不能保证在抢占CPU的执行权的时候,A/B线程,A一次,B一次,也就是说明线程的执行随机性大。

liutao0414的博客 282

java基础day21

Day21 一、线程(java里的线程都是抢占式分配资源的) 1、并发(高并发):在同一个时间段,执行两个或者多个操作(交替执行) 2、并行:在同一个时间段,同时执行两个或者多个操作(同时进行) 3、进程:一个正在运行程序,在内存里开辟过空间,进程里包含多个线程 4、线程:表示每一条执行的路径,是资源分配的最小单位 5、java里实现多线程的方式 (1)继承Thread(线程类)《jvm允许应用程...

CsDn_yoona的博客 281

Day35 | Java多线程入门

本文介绍了Java多线程编程的基础知识。主要内容包括:1. 多线程基本概念(进程、线程、并发与并行);2. 线程创建的两种方式(继承Thread类和实现Runnable接口);3. 线程的生命周期及状态转换(Java层面6种状态与操作系统状态的映射关系);4. Thread类的常用方法(start、sleep、join、interrupt等)。文章强调多线程编程可以充分利用多核CPU资源,但需要注意线程调度不可预测性,并建议将任务与执行载体解耦。

懒惰蜗牛的博客 1178
上一篇: 【Day20】集合
下一篇: 【Day22】解决线程安全问题以及JDK1.5新增
「已注销」
博客等级 码龄4年 169粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

老板大气,I am happy

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值