Java创建多线程的最全方法

news2024/11/23 5:04:31

Java创建多线程的最全方法

  • 一、继承Thread,重写run方法
  • 二、实现Runnable接口,重写run方法
  • 三、使用匿名内部类创建 Thread 子类对象
  • 四、使用匿名内部类,实现Runnable接口
  • 五、实现Callable接口
  • 六、使用线程池创建线程

一、继承Thread,重写run方法

  1. 创建出MyThread实例,并不代表在系统真的创建一个线程,只有调用start方法时,才创建出一个新的线程
  2. 运行一次Java程序就启动了一个进程,一个进程里至少会有一个线程,这里JVM默认创建的线程就是main线程(主线程),main主线程和MyThread创建出来的新线程是同时执行,各执行各的;
  3. 调用run方法会顺序执行
public class MyThread extends Thread{
    @Override
    public void run() {
        for(int i = 0;i <= 100;i++){
            System.out.println("Hello World!!"+i);
        }
    }

    public static void main(String[] args) {
        MyThread t1 = new MyThread();
        t1.start();//启动线程
        for(int i = 0;i <= 1000;i++){
            System.out.println("主线程的 Hello World!!"+i);
        }
        
    }
}

在这里插入图片描述

二、实现Runnable接口,重写run方法

  • 通过自定义一个类 MyThread1 实现 Runnable 接口,重写 run 方法,最后在main方法new出MyThread1 实例 和 Thread实例,最后通过 start 方法创建并启动线程。
  • 主线程和新线程是同时执行,互不影响
public class MyThread1 implements Runnable{
    @Override
    public void run() {
        for(int i = 0;i <= 2000;i++){
            System.out.println( "我在玩手机"+i);
        }
    }
    public static void main(String[] args) {

        MyThread1 myThread1 = new MyThread1();
        new Thread(myThread1).start();

        for(int i = 0;i <= 2000;i++){
            System.out.println("我在吃饭"+i);
        }
    }
}

在这里插入图片描述

三、使用匿名内部类创建 Thread 子类对象

直接创建Thread子类,同时实例化出一个对象,重写run方法,最后通过start方法创建并启动线程

public class A {
    public static void main(String[] args) {

        Thread thread = new Thread(){
            @Override
            public void run(){
                System.out.println("使用匿名内部类创建 Thread 子类对象");
            }
        };
        thread.start();
    }
}

四、使用匿名内部类,实现Runnable接口

通过使用使用匿名内部类,实现Runnable接口作为Thread构造方法的参数,最后通过start创建并启动线程;

public class A {
    public static void main(String[] args) {
        Thread thread = new Thread(new Runnable() {
            @Override
                public void run(){
                    System.out.println("使用匿名内部类创建 Thread 子类对象");
            }
        });
        thread.start();
    }
}

五、实现Callable接口

  • 创建一个类 MyCallable 实现Callable接口
  • 重写call方法(有返回值,表示多线程运行的结果)
  • 创建MyCallable对象(表示多线程要执行的任务)
  • 创建FutureTask的对象(管理多线程运行的结果)
  • 创建Thread类的对象,并启动
public class MyCallable implements Callable<Integer> {
    @Override
    public Integer call() throws Exception {
        System.out.println("实现Callable接口");
        return 2;
    }
    public static void main(String[] args) throws ExecutionException, InterruptedException {
       MyCallable myCallable = new MyCallable();
       FutureTask<Integer> f = new FutureTask<>(myCallable);
       Thread thread = new Thread(f);
       thread.start();
       System.out.println(f.get());
    }
}

在这里插入图片描述

六、使用线程池创建线程

在Java中,线程池的本体叫ThreadPoolExecutor,他的构造方法写起来十分麻烦,为了简化构造方法,标准库就提供了一系列方法,简化使用

public class MyThread4 implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println("我正在学习" + i);
        }
    }

    public static void main(String[] args) {
        ExecutorService executorService = Executors.newCachedThreadPool();//创建一个没有上线的线程池

        // ExecutorService executorService1 = Executors.newFixedThreadPool(6);//创建固定数量的线程池

        executorService.submit(new MyThread4());//提交任务
        executorService.shutdown();//销毁线程池
    }
}

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

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

相关文章

Jmeter性能测试 —— jmeter之使用ServerAgent监控服务器

ServerAgent 性能测试时我们关注的重要指标是&#xff1a;并发用户数&#xff0c;TPS&#xff0c;请求成功率&#xff0c;响应时间&#xff0c;服务器的CPU&#xff0c;memory&#xff0c; I/O disk等。Jmeter的聚合报告可以查看并发数、吞吐量、请求成功率、响应时间等&#…

看康师傅金桔柠檬X国漫IP跨界出圈,打开IP合作新思路

Z世代年轻群体已经成为消费主力&#xff0c;其喜好和消费观念也呈现出全新态势。抓住年轻人的心&#xff0c;就是抓住了品牌未来的战场。 那么到底什么样的营销动作才能真正撬动年轻人&#xff1f; 对于互联网时代成长起来的Z世代年轻人来说&#xff0c;人气二次元IP无疑是能最…

python实现樱花

python实现樱花 代码如下&#xff1a; from turtle import * from random import * from math import * def tree(n, l):pd () # 下笔# 阴影效果t cos ( radians ( heading () 45 ) ) / 8 0.25pencolor ( t, t, t )pensize ( n / 3 )forward ( l ) # 画树枝if n > 0:…

vue3+vite配置vantUI主题

❓在项目中统一配置UI主题色&#xff0c;各个组件配色统一修改 vantUI按需安装 参考vantUI文档 创建vantVar.less文件夹进行样式编写 vantVar.less :root:root{//导航--van-nav-bar-height: 44px;//按钮--van-button-primary-color: #ffffff;--van-button-primary-backgr…

Android免打包多渠道统计如何实现

摘要&#xff1a; 实际上只要完成1-2步即可实现多渠道打包&#xff0c;这也意味着&#xff0c;只要每次更新App时给出一个原始包&#xff0c;运营人员就能在后台自己进行操作管理&#xff0c;简单快捷到全程无需开发人员参与。 我们都知道&#xff0c;Android 市场被分割成几十…

如何分辨NMOS和PMOS的电路符号

这个是N沟道增强型MOS管的电路符号&#xff0c; 这个是P沟道增强型MOS管的电路符号&#xff0c;有时我们很容易把这两个符号弄混。 首先对于单个MOS管而言内部衬底和源极是接在一起的&#xff0c;所以我们看到的MOS管电路符号&#xff0c;源极和衬底是接在一起的&#xff0c;并…

VirtualBox虚拟机下载安装(win10)

1.官网下载安装包 https://www.virtualbox.org/ 1.1 跳转到下载页 1.2 下载安装包 * 如果打开安装包报错 搜索依赖的安装包 https://learn.microsoft.com/zh-cn/cpp/windows/latest-supported-vc-redist?viewmsvc-170 下载对应的安装包 安装完毕后再重新打开虚拟机安装包即…

高忆管理:熔断机制是哪年开始的?

随着经济全球化和金融商场的普及&#xff0c;股市投资逐步成为普通人的一种重要理财方法。但是&#xff0c;因为商场危险和不可控因素的存在&#xff0c;股市呈现极点状况下的商场崩盘和体系性危险成为了一种无法忽视的可能性。为了避免这种状况产生&#xff0c;一种受到广泛关…

ROS学习笔记(二)---使用 VScode 开发 ROS 的Python程序(简例)

一、任务介绍 本篇作为ROS学习的第二篇&#xff0c;是关于如何在Ubuntu18.04中使用VSCode编写一个Python程序&#xff0c;输出“Hello&#xff01;”的内容介绍。 首先我们来了解下ROS的文件系统&#xff0c;ROS文件系统级指的是在硬盘上ROS源代码的组织形式&#xff0c;其结构…

C++入门基础(万字详解!!!)

文章目录 前言1.C关键字2.命名空间3.C的输入输出4.缺省参数4.1 全缺省4.2 半缺省 5.函数重载6. 引用6.1 引用的特性6.2 引用的使用场景6.3 引用和指针 7.内联函数7.1 特性 8.auto关键字8.1 注意事项 9. 基于范围的for循环9.1 使用条件 10.指针控制nullptr10.1 注意事项 11.总结…

iTOP-RK3588开发板单独编译Android固件-打包update.img

在 uboot kernel android 都编译完成的情况下&#xff0c;才可以打包 update.img&#xff0c;所以一般在完整编 译的时候用。输入以下命令&#xff1a; ./build.sh -u 打包完成会在 rockdev/Image-rk3588_s 目录下生成 update.img 镜像。 更多内容&#xff1a;B站搜索迅为RK…

分布式锁有哪些应用场景和实现?

电商网站都会遇到秒杀、特价之类的活动&#xff0c;大促活动有一个共同特点就是访问量激增&#xff0c;在高并发下会出现成千上万人抢购一个商品的场景。虽然在系统设计时会通过限流、异步、排队等方式优化&#xff0c;但整体的并发还是平时的数倍以上&#xff0c;参加活动的商…

电脑垃圾清理怎么做?记住这5个方法!

“我的电脑用了快一年了吧&#xff01;现在感觉电脑里很多垃圾文件&#xff0c;但又害怕在删除这些垃圾文件时会将一些重要的文件一起删除掉。所以不敢对电脑进行清理。想问下大家平常有没有好用方法去清理电脑呀&#xff1f;感谢&#xff01;” 随着电脑使用时间的推移&#x…

item_get_sales-获取商品销量详情

一、接口参数说明&#xff1a; item_get_sales-获取商品销量详情&#xff0c;点击更多API调试&#xff0c;请移步注册API账号点击获取测试key和secret 公共参数 请求地址: https://api-gw.onebound.cn/taobao/item_get_sales 名称类型必须描述keyString是调用key&#xff08…

什么是 BLE 网关?

Ble网关是一种低功耗设备&#xff0c;可在附近将智能设备连接至基于蓝牙的产品. 它使人们能够将信息从蓝牙设备传输到云. 这些设备可以是传感器或Ble信标. 使用时, 传输数据时无需更改任何内容. 使用这个装置, 您可以将基于蓝牙的产品连接到扬声器等外部硬件. 例如, 您可以在办…

开放式耳机哪个好一点?推荐几款优秀的开放式耳机

在追求更广阔的音场和更真实的音质时&#xff0c;开放式耳机是绝对值得考虑的选择。它们以其通透感和自然的音质而备受推崇&#xff0c;带来更逼真的音乐体验。下面我来推荐几款优秀的开放式耳机&#xff0c;满足你对音质和舒适度的要求&#xff0c;可尽情享受音乐的魅力。 一…

Stable Diffusion+Roop单张图片换头roop安装配置【包含roop破解方法】

1.首先安装秋叶大佬的webui 2.然后在拓展里面搜索roop,下载roop插件,然后重启webui 3.重启后,在文生图和图生图的界面,就可以看到roop的入口 4.这里面,需要提前安装Visual Studio. 勾选一些必要的选项,这里可以参照b站的视频 # 秋叶版本Stablediffusion的Roop插件的安装 …

问题记录和细节补充(完善中)

【问题记录】ORA-01400: 无法将 NULL 插入 Ajax 调用为Execute Server-Side Code返回了服务器错误ORA-01400: 无法将 NULL 插入 ("YWJA"."DEPT_TEST_WXX2"."DEPT_ID")。 原因&#xff1a;主键非自增&#xff0c;输入时并未有主键值传递&#x…

科研绘图chapter1:绘图原则与配色基础

本系列会持续更新&#xff0c;主要参考datawhale的开源课程。详见&#xff1a; https://github.com/datawhalechina/paper-chart-tutorial 文章目录 1.1 科研论文配图的绘制基础1.2 科研论文配图的配色基础1.2.1 配色模式1.2.2 色环配色原则1.3 配色工具/网站 1.1 科研论文配图…

组态王-实现语音播报告警点位信息及语音通知-语音播报器|声光报警器|工业报警方案|语音报警器|工业报警器|语音播报模块

需求简介 本文将介绍组态王如何对产生的告警实现声光语音播报&#xff0c;根据不同的告警点位&#xff0c;朗读具体的告警内容。 本文使用大连英仕博科技有限公司生产的博灵语音通知终端A4与北京亚控开发的组态王进行联动。 本文章分2部分讲解 第一部分为demo调用演示第二部…