Java 实现多线程的几种方式-超详细(干货)

【java多线程编程】三种多线程的实现方式 文章目录前言进程与线程继承Thread类,实现多线程FAQ 为什么多线程的启动不直接使用run()方法而必须使用Thread类中start()方法呢?基于Runnable接口实现多线程Thread 与 Runnable 的关系Callable实现多线程线程运行状态 前言       在java语言最大的特点是支持多线程的开发(也是为数不多... 阅读详情

订阅 TheTutorials/Java 学习更多 Java 相关的知识

Java 多线程

Java 本身提供了对多线程的支持,多线程允许并发的执行程序的多个部分,最大成程度的利用 CPU,一个进程是由多个线程所组成,因此线程可以看作轻量级进程。

Java 实现多线程

  • 继承 Thread

    public static void main(String[] args) {
    
        /* 创建线程 */
        MyThread firstThread = new MyThread("firstThread");
        MyThread secondThread = new MyThread("secondThread");
    
        /* 启动线程,当线程获取CPU时间片的时候就会开始运行 */
        firstThread.start();
        secondThread.start();
    }
    
    static class MyThread extends Thread {
        MyThread(String name) {
            super(name);
        }
    
        MyThread() {
            super();
        }
    
        @Override
        public void run() {
            super.run();
            System.out.format("线程%s正在运行,线程id:%d\n",
                    Thread.currentThread().getName(), Thread.currentThread().getId());
        }
    }
    

    输出

    线程secondThread正在运行,线程id:22
    线程firstThread正在运行,线程id:21
    
  • 实现 Runnable 接口 (推荐)

    public static void main(String[] args) {
        Thread firstThread = new Thread(new MyThread(), "firstThread");
        Thread secondThread = new Thread(new MyThread(), "secondThread");
    
        firstThread.start();
        secondThread.start();
    }
    
    static class MyThread implements Runnable {
        @Override
        public void run() {
            System.out.format("线程%s正在运行,线程id:%d\n",
                    Thread.currentThread().getName(), Thread.currentThread().getId());
        }
    }
    

    输出

    线程secondThread正在运行,线程id:22
    线程firstThread正在运行,线程id:21
    
  • 匿名 Runnable 类 (Java 8 之前的版本)

    new Thread(new Runnable() {
        @Override
        public void run() {
            new Thread(()-> System.out.format("线程%s正在运行,线程id:%d\n",
                    Thread.currentThread().getName(), Thread.currentThread().getId())).start();
        }
    }).start();
    
  • Java 8 lambda 语法格式实现多线程

    public static void main(String[] args) {
        Thread firstThread = new Thread(()-> System.out.format("线程%s正在运行,线程id:%d\n",
                Thread.currentThread().getName(), Thread.currentThread().getId()));
        firstThread.start();
    
        new Thread(()-> System.out.format("线程%s正在运行,线程id:%d\n",
                Thread.currentThread().getName(), Thread.currentThread().getId())).start();
    }
    

使用 Thread 还是 Runnable

  • 如果我们的类继承了 Thread,那么将无法继承其他的类,因为 Java 不支持多继承,而当我们实现 Runnable 接口还能继续继承其他的类

  • 如果继承 Thread 类我们可以实现基本的功能,因为 Thread 提供类一些内置函数如 yield(), interrupt 等,这些是实现 Runnable 接口没有的功能

References

  1. https://stackoverflow.com/questions/541487/implements-runnable-vs-extends-thread-in-java
Java 实现多线程的四种方式 超详细 由于该队列的近似无界性,当线程池中线程数量达到corePoolSize后,再有新任务进来,会一直存入该队列,而基本不会去创建新线程直到maxPoolSize(很难达到Interger.MAX这个数),因此使用该工作队列时,参数maxPoolSize其实是不起作用的。基于数组的有界阻塞队列,按FIFO排序。创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO,LIFO,优先级)执行,适用于需要保证顺序执行各个任务,并且在任意时间点,不会有多个线程时活动的场景。 阅读详情

相关推荐

解决vscode 连接服务器报错:The remote host may not meet VS Code Server‘s prerequisites for glibc and libstdc++

解决vscode远程连接服务器报错:The remote host may not meet VS Code Server's prerequisites for glibc and libstdc++ (The remote host does not meet the prerequisites for running VS Code Server)

qq_37200100的博客 9909

Java多线程实现的四种方式

Java多线程实现的方式有四种 1.继承Thread类,重写run方法 2.实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target 3.通过Callable和FutureTask创建线程 4.通过线程池创建线程 .........

Infor_learning的博客 4370

Windows游戏多开检测实战:5种技术原理与破解方法详解(附C++代码)

本文深入解析了Windows游戏多开检测的5种核心技术原理,包括进程枚举、互斥体、信号量、窗口及文件映射检测,并详细探讨了对应的破解方法。通过分析这些基于进程和内核对象的攻防机制,为开发者与逆向爱好者提供了从底层理解Windows系统进程管理的实战视角,并附有核心C++代码示例。

weixin_29315091的博客 243

java中实现多线程的三种方式

实现多线程的方法

Mao_yafeng的博客 1万+

uniapp中renderjs实战:手把手教你实现SSE即时通讯(附完整代码)

本文通过一个完整的实战案例,详细讲解了如何在uni-app中使用RenderJS实现SSE即时通讯功能。文章剖析了RenderJS作为Vue视图层强力补充的原理,并提供了包含自动重连、状态管理等健壮性设计的完整代码,帮助开发者突破框架限制,高效集成浏览器原生API。

weixin_29005499的博客 188

缺陷检测-金属表面缺陷检测

1介绍 缺陷检测是工业视觉技术中最重要的组成部分。业务广泛,场景丰富,技术难点高、工作量大。针对不同的场景,选择不同的相机和

huneng1991的专栏 5248

Java多线程——线程实现的三种方式

线程的三种创建方式 1.继承Thread类 例子1 // 创建方式一:继承Thread类,重写run()方法 调用start开启线程 public class TestThread01 extends Thread{ @Override public void run() { for (int i = 0; i < 20; i++) { System.out.println("我在看代码"+i); } } public static void main(String[]

u010759175的专栏 2672

hcaptcha逆向实战:从API解析到参数构造的完整链路

本文详细拆解了hcaptcha验证码的逆向实战流程,从环境准备、捕获API与版本号,到解析核心加密逻辑hsw.js,再到构造getcaptcha请求参数,最后完成验证提交。文章重点剖析了motionData、n、c等关键参数的获取与构造方法,为开发者模拟浏览器行为、实现自动化验证提供了清晰的完整链路指南。

ik678901的博客 629

java 多线程实现的四种方式

ScheduledExecutorService newScheduledThreadPool() : 创建固定大小的线程,可以延迟或定时的执行任务。ExecutorService newCachedThreadPool() : 缓存线程池,线程池的数量不固定,可以根据需求自动的更改数量。ExecutorService newSingleThreadExecutor() : 创建单个线程池。|–ExecutorService 子接口: 线程池的主要接口。工具类 : Executors。

李白 3175

【Python_Zebra斑马打印机编程学习笔记(二)】基于BarTender将btw文件转换为zpl文件

本文介绍如何基于 BarTender 软件将 btw 格式的文件转换为 zpl 格式的文件,有需要的读者可以点赞收藏,也欢迎在评论区进行讨论。

禾戊之昂的博客 3375

Python爬虫抓取学术期刊数据(Springer、Elsevier)

本文详细介绍了如何使用Python爬虫抓取学术期刊网站(如Springer、Elsevier)上的文章信息,并进行数据清洗和存储。我们使用了requestsSeleniumpandas等技术,通过模拟浏览器行为来绕过反爬虫机制,并将数据保存为Excel文件,方便后续分析。未来,我们可以通过加入更多的期刊网站数据源,扩展爬虫的功能,抓取更多的学术数据。同时,结合自然语言处理(NLP)技术,可以对抓取的文章进行自动化的摘要提取和主题分类,为学术研究提供更多的支持。

2201_76125261的博客 1487

java 线程安全 方法_java线程安全的方法有几种?

1、互斥同步互斥同步是最常见、最重要的并发正确性保障手段,也称为堵塞同步。同步是指在多条线路并发访问共享数据时,保证共享数据在同一时间只能使用一条线路(或者使用信号量时)。互斥是实现同步的手段,临界区、互斥量和信号量是常见的互斥实现方式。因此,在互斥同步这四个字中,互斥是原因,同步是果实的互斥是方法,同步是目的。Java中,互斥同步手段是synchronized关键词和重新开锁。2、非阻塞同步互斥...

weixin_32771227的博客 1702

晶体管-二极管三极管MOS管选型参数总结

二极管三极管和MOS管,是电路中常用的控制电流电压的基本电子元器件。电路世界中晶体管的选型,需要考虑的参数多种多样,这些参数的选择会直接影响到电路的性能、稳定性、成本等多个方面。本文对二极管三极管和MOS管的选型参数进行详细介绍并总结。

fydar的博客 884

多线程的几种实现方式

上篇文章总结了下关于线程池很干,很干的干货,这次想着顺便连其他实现多线程的三种方式也汇总下吧! java多线程的几种实现方式: 1.继承Thread类,重写run方法 2.实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target 3.通过Callable和FutureTask创建线程 4.通过线程池创建线程 (上一篇已经讲过了...

Mr.zhao 7万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【多线程】Java中多线程的几种实现方式

多线程(multithreading)是指在一个程序中同时执行多个不同的线程(thread),每个线程都是程序的一部分,是独立的执行路径。相比于单线程程序,多线程程序可以更充分地利用计算机的多核心或多处理器资源,提高程序的运行效率和用户体验。在多线程编程中需要注意线程同步、锁、死锁等问题。

小筱在线博客 2331

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

详述Java实现Callable接口实现多线程的方式

公司项目忙的晕头转向,终于有时间可以看点自己想看的东西了。在这里把最近学习的实现Callable接口实现多线程的方式做一个总结: 首先我们都知道,在Java中最常见的是继承Thread类和实现Runnable接口来实现多线程( 这里我推荐采用实现接口的方式来实现多线程,原因有两点: 1、Java的设计是单继承的设计,如果采用继承Thread的方式实现多线程,则不能继承其他的类。 2、采用接...

weixin_42606135的博客 2万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

实现多线程的几种方式

方式一:实现继承Thread类 步骤: 1:定义一个类去继承Thread类,比如ThreadDemo 2:重写run()方法 3:在测试类中创建ThreadDemo类的对象 4:启动线程 ThreadDemo类 public class ThreadDemo extends Thread { @Override public void run() { for (int i = 0; i <100 ; i++) { System.out.print

qq_49830628的博客 6805

【多线程高并发编程】二 实现多线程的几种方式

本文我们来看看多线程的应用场景,为什么要用多线程,以及实现一个多线程有几种方式。

程序猿学社的博客 1万+

java多线程的几种实现方式

/比第一种多出这步(new一个Thread类,并将任务类r传进去)1.定义一个Mythread类并继承Thread类,重写Thread的run方法,方法内部写具体的业务代码。//第二种实现runable接口,重写Runable接口run方法。// 多线程的第一种启动方式继承Thread,成为子类。2.调用Mythread类。1.定义MyRun类。

qq_36633637的博客 599

java 实现多线程几种方式

java多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。 其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。 1、继承Thread类实现多线程 继承Thread类的方法尽管被我列为一种多线程实现方式,但Thread本质上也是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过Thread类的start()实例方法。start()方法是一

花开半夏 · 流年似水 2439

java多线程实现的几种方式

1.通过继承Thread类实现 public class MyThread extends Thread{ public void run(){ System.out.println(&amp;amp;quot;New Thread : &amp;amp;quot;+Thread.currentThread().getName()); } public static void main (String []a...

Medlen 2943

Java中实现多线程的几种方式

一:概述在Java编程中,多线程是一个非常重要的概念,它可以让程序同时执行多个任务,从而提高程序的效率和性能。本文将介绍几种在Java中实现多线程的方法,并提供实际的案例。二:具体说明<1>使用Thread类Java提供了一个Thread类,我们可以通过继承Thread类来创建自己的线程类。案例登录后复制 ...

Java_fenxiang的博客 1175
上一篇: 为什么变量名命名不能以数字开头(干货)
下一篇: 如何在 Docker 中使用 Redis
ishellhub
博客等级 码龄9年 102粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值