Java基础-多线程JUC-多线程实现的三种形式

news2024/11/18 20:18:43

1. 第一种

继承Thread,重写run方法

public class demo1 {
    public static void main(String[] args) {
        /**
         * 多线程的第一种启动方式
         * 1. 定义一个类继承Thread
         * 2. 重写run方法
         * 3. 创建子类的对象,并启动线程
         */
        MyThread myThread = new MyThread();
        MyThread myThread2 = new MyThread();
        MyThread myThread3 = new MyThread();
        myThread.setName("线程1");
        myThread2.setName("线程2");
        myThread3.setName("线程3");
        // start开启线程
        myThread.start();
        myThread2.start();
        myThread3.start();
    }
}
class MyThread extends Thread{
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println(getName() + "重写run方法...");
        }
    }
}

2. 第二种

实现Runnable接口的方式进行实现;
注意实现Runnable接口,就不能直接调用getName(),可以通过Thread.currentThread();获取当前执行的线程对象,再通过thread.getName()获取线程名,用于区分结果的输出;

public class demo2 {
    public static void main(String[] args) {
        /**
         * 多线程的第二种启动方式
         * 1. 定义一个类实现Runnable接口
         * 2. 重写run方法
         * 3. 创建类的对象
         * 4. 创建一个Thread类的对象,并启动线程
         */

        // 创建MyRun的对象
        // 表示多线程要执行的任务
        MyRun myRun = new MyRun();

        // 创建线程对象
        Thread thread = new Thread(myRun);
        Thread thread2 = new Thread(myRun);
        thread.setName("t1");
        thread2.setName("t2");

        thread.start();
        thread2.start();
    }
}
class MyRun implements Runnable{

    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            // 获取到当前线程的对象
            Thread thread = Thread.currentThread();
            System.out.println(thread.getName() + "重写run方法...");
        }
    }
}

第三种

利用Callable接口和Future接口方式实现

public class demo3 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        /**
         * 多线程的第三种实现方式:
         *      特点:可以获取到多线程运行的结果
         *      1. 创建一个类MyCallable实现Callable接口
         *      2. 重写call(有返回值,表示多线程运行的结果)
         *      3. 创建MyCallable的对象(表示多线程要执行的任务)
         *      4. 创建FutureTask的对象(作用管理多线程运行的结果)
         *      5. 创建Thread类的对象,并启动(表示线程)
         */
        // 创建MyCallable的对象(表示多线程要执行的任务)
        MyCallable myCallable = new MyCallable();
        // 创建FutureTask的对象(作用管理多线程运行的结果)
        FutureTask<Integer> integerFutureTask = new FutureTask<Integer>(myCallable);
        // 创建Thread类的对象,并启动(表示线程)
        Thread thread = new Thread(integerFutureTask);
        // 启动线程
        thread.start();
        // 获取多线程结果
        Integer integer = integerFutureTask.get();
        System.out.println(integer);
    }
}
class MyCallable implements Callable<Integer>{

    @Override
    public Integer call() throws Exception {
        // 求1~100之间的和
        int temp = 0;
        for (int i = 1; i <= 100; i++) {
            temp = temp + i;
        }
        return temp;
    }
}

在这里插入图片描述

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

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

相关文章

受检异常和非受检异常

所谓的受检异常&#xff0c;表示在编译的时候强制检查的异常&#xff0c;这种异常需要显示的通过 try/catch 来捕捉&#xff0c;或者通过 throws 抛出去&#xff0c;否则从程序无法通过编译。 而非受检异常&#xff0c;表示在编译器可以不需要强制检查的异常&#xff0c;这种异…

Java基础---如何理解Java中的多态

目录 所谓多态 方法的重载与重写 重载和重写的区别 所谓多态 多态的概念比较简单&#xff0c;就是同一操作作用于不同的对象&#xff0c;可以有不同的解释&#xff0c;产生不同的执行结果如果按照这个概念来定义的话&#xff0c;那么多态应该是一种运行期的状态为了实现运行…

VScode 配置Orbslam debug调试环境(ubuntu18.04)

如果没有安装VScode的话&#xff0c;可以去点击官网下载 如果已经安装了VScode&#xff0c;可以直接把ORBSLAM的工程文件夹拖到VScode中&#xff0c;系统会提示是否添加C/C编译工具&#xff0c;直接安装即可&#xff0c;安装过程中也可以安装一下cmake 将ORBSLAM的工程文件夹拖…

obs编译

源码地址&#xff1a; GitHub - obsproject/obs-studio: OBS Studio - Free and open source software for live streaming and screen recording windows 编译&#xff1a; Build Instructions For Windows obsproject/obs-studio Wiki GitHub https://www.cnblogs.co…

app自动化测试(Android)--App 控件定位

客户端的页面通过 XML 来实现 UI 的布局&#xff0c;页面的 UI 布局作为一个树形结构&#xff0c;而树叶被定义为节点。这里的节点也就对应了要定位的元素&#xff0c;节点的上级节点&#xff0c;定义了元素的布局结构。在 XML 布局中可以使用 XPath 进行节点的定位。 App的布…

pytorch 迁移训练自己的数据集

1、pytorch 基础训练 上一节为基础 视频与AI&#xff0c;与进程交互(二) pytorch 极简训练自己的数据集并识别 接着上面一节&#xff0c;我们开始使用迁移学习&#xff0c;训练自己的数据集和保存网络&#xff0c;加载网络并识别。 2、 pytorch加载resnet18 RetNet网络的基础…

Vscode platformio Arduino开发STM32,点灯+串口调试

1.工具 USB-TTL(非常便宜&#xff0c;几块钱)STM32F103C8T6(几块钱) 2.引脚连线 USB-TTLSTM32TXPA10RXPA9VCC3.3VGNDGND 注意事项&#xff1a; 跳线帽位置&#xff1a;BOOT0接高电平(1)&#xff0c;BOOT1接低电平(0)每次上传程序前需要按一下复位键(之后&#xff0c;跳线帽…

互联网编程之基于 TCP 的单线程文件收发程序(CS架构)

目录 需求 服务端实现 客户端实现 测试 需求 可试着根据java编程课所学到的java socket编程技术&#xff0c;尝试编写一个基于 TCP 的单线程文件收发程序&#xff0c;需满足&#xff1a; 服务端程序预先定义好需要发送的文件并等待客户端的连接。 客户端连接成功后&…

ranger配置hive出錯:Unable to connect repository with given config for hive

ranger配置hive出錯&#xff1a;Unable to connect repository with given config for hive 我一開始我以為是我重啟了ranger-admin導致ranger有點問題&#xff0c;後面排查之後發現是我之前把hiveserver2關閉了&#xff0c;所以只需要重新開啟hiveserver2即可

开源 sysgrok — 用于分析、理解和优化系统的人工智能助手

作者&#xff1a;Sean Heelan 在这篇文章中&#xff0c;我将介绍 sysgrok&#xff0c;这是一个研究原型&#xff0c;我们正在研究大型语言模型 (LLM)&#xff08;例如 OpenAI 的 GPT 模型&#xff09;如何应用于性能优化、根本原因分析和系统工程领域的问题。 你可以在 GitHub …

一个真实的社会工程学攻击

社会工程学实例 不同于以往通过心理诱骗暗示或欺诈手段社会工程学举例&#xff0c;本次为大家介绍一种特殊的结合刑侦推理及利用技术手段实现的社会工程学实例&#xff0c;可以把它归类为特殊层面的信息收集手段——通过照片确定发拍照人所在的位置&#xff0c;这种社工手段严格…

ExtJS4 相关

2. 程序架构 2.1 目录结构 推荐下面这种目录结构(非强制&#xff0c;如果你足够懂和自信) - appname- app- namespace- Class1.js- Class2.js- ...- extjs- resources- css- images- ...- app.js- index.html appname 包含所有程序代码&#xff0c;是根目录 app 包含所有类&…

MySQL基础篇(day03,复习自用)

MySQL第三天 排序与分页内容练习 多表查询内容练习 排序与分页 内容 #第五章 排序与分页#1.排序 #如果没有使用排序操作&#xff0c;默认情况下查询返回的数据是按照添加数据的顺序显示的。 SELECT * FROM employees;#1.1基本使用 #使用 ORDER BY 对查询到的数据进行排序操作 …

JSON轻量级数据交换格式

文章目录 前言前后端数据交换格式比较JavaScript自定义对象 前言 JSON全名 &#xff1a;JavaScriptObjectNoation JSON在后端和前端中起着非常重要的作用。 在前端&#xff0c;JSON被用作一种数据格式&#xff0c;用于从服务器获取数据并将其展示在网页上&#xff1b; 前端开…

[SpringBoot]单点登录

关于单点登录 单点登录的基本实现思想&#xff1a; 当客户端提交登录请求时&#xff0c;服务器端在验证登录成功后&#xff0c;将生成此用户对应的JWT数据&#xff0c;并响应到客户端 客户端在后续的访问中&#xff0c;将自行携带JWT数据发起请求&#xff0c;通常&#xff0c…

LeetCode 2501 数组中最长的方波 Java

方法一&#xff0c;哈希表枚举 构造哈希集合&#xff0c;记录出现过的数字枚举遍历 import java.util.HashSet; import java.util.Set;class Solution {public int longestSquareStreak(int[] nums) {//构造哈希表集合&#xff0c;记录出现过的数字&#xff0c;转long型&…

kafka入门,Leader 和 Follower 故障处理细节(十四)

Leader 和 Follower 故障处理细节 LEO:每个腹部最后一个offset,leo其实就是最新的offset1 HW:所有副本中最小的LEO Follower故障处理细节 &#xff08;1&#xff09;Follower发生故障会被临时提出ISR (2) 这个期间leader和Follower积蓄接收数据 (3) 待该Follower恢复后&#…

嵌入式基础知识

1.嵌入式系统的定义 以应用为中心&#xff0c;以计算技术为基础软硬件可裁剪&#xff0c;适应系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机技术。 主要由嵌入式微控制器、外围硬件设备、嵌入式操作系统以及用户应用软件等部分分组成。 具有“嵌入式” 、“专用…

CSS 内容盒子与边框盒子

这章比较重要&#xff0c;会不断更新❗ 文章目录 &#x1f447;内容盒子开发者工具的使用border 边框padding 内边距margin 外边距盒子整体尺寸元素默认样式与CSS重置元素分类块级标记行级标记行内块标记 display样式内容溢出裁剪掉溢出部分滚动条 圆角边框 border-radius ✌边…

【MySQL数据库】MMM高可用架构

目录 一 、MMM简介1.1MMM&#xff08;Master-Master replication manager for MvSQL&#xff0c;MySQL主主复制管理器&#xff09;1.2关于 MMM 高可用架构的说明如下 二、搭建mysql MMM架构2.1实验环境2.2搭建多主多从2.3安装配置 MySQL-MMM 一 、MMM简介 1.1MMM&#xff08;M…