JAVA多线程实现的三种方式

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

方式一:继承Thread类
步骤:
1.自定义一个类并继承Thread类
2.自定义类需要重写Thread的run()方法
3.创建对象
4.启动线程

class MyThread extends Thread{
    public void run() {
        for(int i=0;i<100;i++){
            System.out.println(getName()+":"+i);
        };
    }
}
public class ThreadDemo {
    public static void main(String[] args) {
        MyThread mt1=new MyThread();
        MyThread mt2=new MyThread();
        mt1.start();
        mt2.start();
    }
}

run()和start()
run()方法:仅仅是封装了被线程执行的代码,如果直接调用就相当于普通方法调用,没有多线程效果。
start()方法:首先启动线程,然后再由JVM去调用该线程的run方法。

方式二:实现Runnable接口方式实现多线程
步骤:
1.自定义一个类并实现Runnable接口
2.重写run()方法
3.创建自定义类对象
4.创建Thread对象,将上面的自定义类的对象作为构造参数传递

class NewThread implements Runnable {
    private int tickets = 100;
    private Object obj=new Object();

    public void run() {
        while (true) {
            synchronized (obj) {
                if (tickets > 0) {
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println(Thread.currentThread().
                            getName() + ":" + (tickets--));
                }
            }

        }

    }

}

public class RunnableDemo {
    public static void main(String[] args) {
        NewThread nt = new NewThread();
        Thread t1 = new Thread(nt, "huge");
        Thread t2 = new Thread(nt, "allen");
        t1.start();
        t2.start();
    }
}

上面的程序中用了同步代码块来解决线程安全问题。
同步的前提:多个线程使用同一个锁对象。
当线程很多时,每个线程都会去判断同步上的锁,这样就会耗费资源,降低了程序的运行效率。
也可以用同步方法来实现,同步方法用synchronized关键字修饰方法。同步方法的锁对象是this,静态同步方法的锁对象是类的字节码文件对象(xxx.class)。

方式三:利用线程池和Callable接口实现多线程(用到了泛型,以Integer为例)
步骤:
1.创建一个线程池对象,控制要创建几个线程对象
2.添加Callable对象代表的线程,注意有返回值
(也可以是Runnable对象,但是没有返回值)
3.通过get()方法获取对象
4.执行相应操作
5.结束

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

class MyCallable implements Callable<Integer> {

    private int number;

    public MyCallable(int number) {
        this.number = number;
    }

    @Override
    public Integer call() throws Exception {
        int sum = 0;
        for (int x = 1; x <= number; x++) {
            sum += x;
        }
        return sum;
    }

}

public class CallableDemo {
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        // 创建线程池对象
        ExecutorService pool = Executors.newFixedThreadPool(2);

        // 可以执行Runnable对象或者Callable对象代表的线程
        Future<Integer> f1 = pool.submit(new MyCallable(100));
        Future<Integer> f2 = pool.submit(new MyCallable(200));

        // V get()
        Integer i1 = f1.get();
        Integer i2 = f2.get();

        System.out.println(i1);
        System.out.println(i2);

        // 结束
        pool.shutdown();
    }
}
Java实现多线程的三种方式以及三种方式的区别(附代码) 1.继承Thread类 Thread 类本质上是实现了 Runnable 接口的一个实例,代表一个线程的实例。启动线程的唯一方 法就是通过 Thread类的 **start()**实例方法。start()方法是一个 native 方法,它将启动一个新线程,并执行 run()方法。 public class MyThread extends Thread { public static void main(String[] args) { MyThread myThread = new 阅读详情

相关推荐

Java 多线程实现的三种方式

运行结果如下: 为什么要重写run()方法?run()方法和start()方法的区别? 运行结果如下: 运行结果如下: 实现Runnable、Callable接口继承Thread类

流楚丶格念的博客 1785

JAVA实现多线程的三种方式

在Java中可通过三种方式来实现多线程: 1、继承Thread类,重写run( )方法 2、实现Runnable接口,重写run( )方法 3、实现Callable接口,重写call( )方法并使用FutureTask获取call( )方法的返回结果 利用Thread类实现多线程 主要步骤 1、通过继承Thread创建线程的子类 2、重写Thread类的run( )方法 3、创建子类实例对象 4、调用子类实例对象start( )方法启动线程 使用示例 package com.thread1; /** pub

qf2019的博客 4166

AI工程化之生成式UI & A2UI(一)

本文系统介绍了生成式UI和Google A2UI技术。生成式UI通过AI直接生成前端代码(完全生成式)或DSL(混合式),实现千人千面的动态界面和研发提效。Google A2UI提出组件级和消息级协议,采用JSON规范实现渲染框架解耦,支持多端渲染。文章详细阐述了A2UI的架构设计,包括协议生成、服务端处理和渲染器实现,并对比了与传统前端框架的差异,指出A2UI本质是UI=F(AI(UI)+AI(state))的创新模式。最后通过playground项目展示了A2UI的实践应用。

qq_34306228的博客 592

java多线程三种实现方式

Thread构造方法。

m0_58975186的博客 726

Cloudflare 5秒盾逆向实战:从503到cf_clearance的全流程拆解(附避坑指南)

本文深入拆解了Cloudflare 5秒盾的完整逆向流程,从首次503响应到最终获取cf_clearance令牌,详细解析了五层挑战机制。文章重点分享了实战中的核心避坑指南,包括时间戳校验、动态图片尺寸获取、会话保持方案选择以及复杂环境检测的应对策略,为开发者提供了一套绕过5秒盾的实用方法论。

weixin_29327977的博客 2311

华为MA5620配置宽带及语音实例

华为EPON配置实例1、公共部分和宽带PPPOE部分用串口用户名密码root/mduadminMA5620E>enableMA5620E#configMA5620E(config)#MA5620E(config)#sysnamebigcow/给设备起名字/****之前为公共部一、建vlan和地址bigcow(config)#vlan100...

weixin_33862041的博客 6348

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

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

weixin_39603778的博客 91

手把手教你用yt-dlp批量下载YouTube视频数据集(附TikTok/Kaggle资源)

本文提供了一份构建视频数据集的实战指南,重点介绍了使用yt-dlp工具批量下载YouTube视频的高级技巧,包括环境配置、批量参数设置与自动化脚本。同时,文章还整合了TikTok、Kaggle及学术开源数据集等多源高质量视频资源,并分享了数据清洗、格式统一与管理的完整流程,帮助研究者和开发者高效获取与处理训练数据。

weixin_29057237的博客 291

Java多线程的三种实现方式

Java多线程实现的三种方式 继承Thread类,实现Runnable接口,使用ExectorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。 1. 继承Thread类实现多线程 Thread本质上也是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过Thread类的start()实例方法。 start()方法是一个native方法,它将启动一个新线程,并执行run()方法 这

xuan的博客 666

能量机关 STM32HAL库开发大疆A板WS2812B彩灯(PWM+DMA)

本文主要目的是为了制作RoboMaster比赛能量机关的灯条控制,模拟比赛场中大符,搭建出类似场地道具,以供视觉测试 使用的是RoboMaster开发板A型,芯片为STM32F427IIH6,使用的灯条为WS2812B。 采用PWM+DMA控制,使用CUBEMX配置底层,keil5编辑烧录代码 实现:一共五片扇叶,每片扇叶均实现流水灯+常亮颜色 参考文章在后面会标记出来

m0_51756449的博客 4292

【ceph】OSD-基本存储单元

OSD 是 Ceph 的基本存储单元,负责对象的存储、检索和数据副本的管理。每个 OSD 进程通常对应于存储集群中的一个物理或虚拟存储设备(如硬盘或 SSD)。OSD 是 Ceph 的关键组成部分,负责对象的存储、管理和复制。通过多个 OSD 共同协作,Ceph 能够提供高可用性、可扩展性和容错能力,适用于各种存储需求。

qq_42853133的博客 1999

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

对于所有语言来说,多线程的编程是绝不可少的。同样的Java语言也包含了多线程的开发。首先,我们先来了解一下Java语言的多线程实现方式。一、Java 多线程实现方式java中实现多线程的方式有三种,接下来我将会逐个进行介绍。1.继承Thread类继承Thread类是Java中比较常见,也是很基础的一种实现Java多线程的方式。实现的方式也比较简单,只要将需要实现多线程的Java类继承java.la...

weixin_30724041的博客 2839

挖矿病毒解决实例(隐藏进程,文章较好)(入侵)

CPU起飞了 最近有朋友在群里反馈,自己服务器的CPU一直处于高占用状态,但用top、ps等命令却一直找不到是哪个进程在占用,怀疑中了挖矿病毒,急的团团转。 根据经验,我赶紧让他看一下当前服务器的网络连接,看看有没有可疑连接,果然发现了有点东西: 上Shodan查一下这IP地址: 反向查找,发现有诸多域名曾经解析到这个IP地址: 这是一个位于德国的IP地址,开放了4444,5555,7777等数个特殊的服务端口: 其中这位朋友服务器上发现的连接到的是7777端口,

墨痕诉清风的博客 1万+

AJPFX关于JAVA多线程实现的三种方式

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

AJPFX的博客 165

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

java多线程的三种实现方式

关于java多线程实现方式,在老师授课时候只讲述了前2种,查了资料,借鉴了别人的博文内容还有其他方式,本文对自己熟悉的做了摘要描述, Java多线程实现方式有三种:继承Thread类、实现Runnable接口、实现Callable接口通过FutureTask包装器来创建Thread线程。 其中前两种方式线程执行完后都没有返回值,最后一种是带返回值的,其实感觉最重要的还是前2种最基础,只

weixin_39905144的博客 151

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

在学习java设计语言程序的过程当中,我们经常会接触到java线程,那么你知道java线程是什么?java多线程如何实现?如果不知道的朋友,那么就与小编一起来好好的学习一下吧。java线程——java线程是什么线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和...

weixin_35924003的博客 169

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Java多线程的三种实现方式详解

Runnable和Callable通过接口实现,更符合面向对象的设计原则。Callable弥补了Runnable无法返回值的缺陷,是复杂任务的优选。结合线程池(如)管理资源,能显著提升程序的健壮性和性能。掌握多线程技术,不仅能优化程序效率,更是深入理解Java并发编程的必经之路。建议在实际开发中多尝试组合使用这些方式,灵活应对不同需求。

m0_69115999的博客 461

Java多线程实现的三种方式

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

weixin_58623780的博客 136

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

最近在做代码优化时学习和研究了下JAVA多线程的使用,看了菜鸟们的见解后做了下总结。1.JAVA多线程实现方式JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。2.继承Thread类实现多线程继承Thread类的方...

weixin_34733070的博客 137
上一篇: 进程与线程的区别
下一篇: java多线程等待唤醒机制
詹詹自喜KING
博客等级 码龄11年 40粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值