Java-多线程

概念

进程:程序的基本执行实体
线程:操作系统能够进行运算调度的最小单位,被包含在进程之中,是进程的实际运作单位
并发:同一时刻,多个指令在单个CPU上交替执行。
并行:同一时刻,多个指令在多个CPU上同时执行。

多线程第一种实现方式——重写run方法

test代码:

public class test {
    public static void main(String[] args) {
        /*
        *  多线程的第一种启动方式:
        *       1.自己重新定义一个类继承Thread
        *       2.重写run方法
        *       3.创建子类对象并启动线程
        * */

        MyThread t1 = new MyThread();
        MyThread t2 = new MyThread();

        t1.setName("线程1");
        t2.setName("线程2");
        t1.start();
        t2.start();
    }
}

线程类代码:MyThread

public class MyThread extends Thread{
    @Override
    public void run() {
        for (int i = 0; i < 20; i++) {
            System.out.println(getName() + "hello");
        }
    }
}

多线程第二种实现方式——实现runable接口

test代码

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

        // 创建MyRun对象
        MyRun mr = new MyRun();

        // 创建线程对象
        Thread t1 = new Thread(mr);
        Thread t2 = new Thread(mr);

        t1.setName("线程1");
        t2.setName("线程2");

        // 开启线程
        t1.start();
        t2.start();
    }
}

runable接口代码

package test614;

public class MyRun implements Runnable {

    @Override
    public void run() {
        for (int i = 0; i < 20; i++) {
            System.out.println(Thread.currentThread().getName() + "hello");
        }
    }
}

多线程第二种实现方式——实现Callable接口和Future接口方式实现

test代码

import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class test3 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        /*
        * 第3种实现方式:
        *   特点:可以获取到多线程的运行结果
        *   1.创建一个类MyCallable实现Callable接口
        *   2.重写call(有返回值,表示多线程的运行结果)
        *   3.创建MyCallable对象,表示多线程要执行的任务
        *   4.创建Future的对象(作用管理多线程运行的结果)
        *   5.创建Thread的对象并启动(表示线程)
        * */

        MyCallable mc = new MyCallable();
        FutureTask<Integer> ft = new FutureTask<Integer>(mc);
        new Thread(ft).start();

        Integer result = ft.get();
        System.out.println(result);
    }
}

MyCallable代码

import java.util.concurrent.Callable;

public class MyCallable implements Callable<Integer> {
    @Override
    public Integer call() throws Exception {
        int sum = 0;
        for (int i = 0; i < 100; i++) {
            sum += i;
        }
        return sum;
    }
}

三种实现方式的对比

实现方式的对比

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

博物馆藏品管理的重要性

博物馆是人们了解历史文化、传承文明的重要场所。而博物馆的藏品管理是博物馆的核心工作之一&#xff0c;对于展现博物馆的魅力、吸引观众的眼球有着至关重要的影响。并且博物馆藏品管理是一项复杂且专业的工作&#xff0c;它涉及到多个方面&#xff0c;包括但不限于藏品的收集…

前沿重器[49] | 聊聊搜索系统2:常见架构

前沿重器 栏目主要给大家分享各种大厂、顶会的论文和分享&#xff0c;从中抽取关键精华的部分和大家分享&#xff0c;和大家一起把握前沿技术。具体介绍&#xff1a;仓颉专项&#xff1a;飞机大炮我都会&#xff0c;利器心法我还有。&#xff08;算起来&#xff0c;专项启动已经…

Unity 踩坑记录 用自定义类 创建的List不显示在 inspector面板

在 自定义类上面添加 【Serializable 】 扩展&#xff1a; 1&#xff1a;Serializable 序列化的是可序列化的类或结构。并且只能序列化非抽象非泛型的自定义的类 2&#xff1a;SerializeField是强制对私有字段序列化

单例模式、工厂模式 c++关键字 static

static 关键字的作用&#xff1a; 主要作用在于 控制变量或函数的作用域、生命周期以及它们如何被不同部分的程序访问&#xff0c;从而帮助程序员管理内存、避免命名冲突&#xff0c;并实现特定的设计模式&#xff08;如单例模式&#xff09;。 1. 静态局部变量&#xff1a;当…

工具推荐-文件捆绑工具

前提 在之前有突发奇想过&#xff0c;有没有那种我发给别人一个pdf文件&#xff0c;别人点击后看到的是pdf文件的内容&#xff0c;我这边也看到了上线的提示。于是就去研究pdf能加入哪些特殊的功能。看了一段时间后发现pdf的一些不一样的功能 像是打开pdf后弹出一个框 或者是…

什么是端口转发?路由器如何正确的设置端口转发和范围转发?(外网访问必备设置)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 端口转发 📒🚀 端口转发的应用场景💡 路由器如何设置端口转发(示例)💡 端口范围转发(示例)🎯 范围转发的应用场景🛠️ 设置范围转发📝 范围转发实操示例🎈 注意事项 🎈⚓️ 相关链接 ⚓️📖 介绍 📖 …

wmv转换mp4怎么操作?3个格式转换方法分享

wmv转换mp4怎么操作&#xff1f;将WMV转换为MP4格式&#xff0c;可以方便我们在多种设备和平台上流畅播放视频。MP4格式具有广泛的兼容性和优化过的编码&#xff0c;使其在各种媒体播放器、智能手机、平板电脑以及电视上都能得到良好的支持。此外&#xff0c;MP4格式的视频文件…

手机直播不用麦克风可以吗?一文看懂无线麦克风哪个好

市面上对于无线麦克风的需求有增无减&#xff0c;原因是直播、短视频行业火爆&#xff0c;许多人都开始加入这一行业&#xff0c;不过对于麦克风这类产品的疑问也越来越多。例如&#xff1a;无线麦克风怎么选&#xff1f;实不实用&#xff1f;手机直播不用麦克风可以吗&#xf…

安卓启动流程

还是以高通为例子。这次整理并不是很完善&#xff0c;下来会参考一些文档再整理。。。 高通平台启动过程_高通平台启动流程-CSDN博客 https://www.cnblogs.com/schips/p/how_qualcomm_soc_boot.html 1. 初始启动阶段&#xff08;Boot ROM&#xff09; 处理器复位&#xff1a;…

OpenCV图像变换

一 图像的缩放 resize(src,dst,dsize,fx,fy,interpolation) fx&#xff1a;x轴的缩放因子 fy&#xff1a;y轴的缩放因子 interpolation 插值算法 INTER_NEAREST,临近插值&#xff0c;速度快&#xff0c;效果差 INTER_LINEAR,双线性插值&#xff0c;原图中的4个点 INTER_CUBIC…

【原创】springboot+mysql社区住户综合管理系统设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…

Java接口实现与类继承

学习初期发现接口实现与类继承很像&#xff0c;随着学习深入发现它们之间的联系与区别&#xff0c;整理如下&#xff1a; 经实验发现&#xff0c;实现接口的类中含有接口中的所有属性和方法&#xff0c;继承父类的子类中也含有父类中所有的属性和方法&#xff0c;可以说接口实…

【SpringBoot + Vue 尚庭公寓实战】公寓杂费接口实现(八)

【SpringBoot Vue 尚庭公寓实战】公寓杂费接口实现&#xff08;八&#xff09; 文章目录 【SpringBoot Vue 尚庭公寓实战】公寓杂费接口实现&#xff08;八&#xff09;1、公寓杂费业务介绍2、公寓杂费逻辑模型介绍3、接口实现3.1、保存或更新杂费值3.2、保存或更新杂费名称3…

Python学习之旅:你的大学计算机专业宝藏路线图

在信息时代的浪潮中&#xff0c;Python以其强大的功能和极简的语法成为了无数程序员心中的白月光。作为大学计算机专业的学生&#xff0c;掌握Python不仅能够为未来的职业生涯铺路&#xff0c;更能让您在学术研究和实际应用中如鱼得水。今天&#xff0c;我将与大家分享一套实用…

南京观海微电子-----PCB设计怎样降低EMI

开关模式电源是AC-DC或DC-DC电源的通用术语&#xff0c;这些电源使用具有快速开关动作的电路进行电压转换/转换(降压或升压)。随着每天开发出更多的设备(潜在的EMI受害者)&#xff0c;克服EMI成为工程师面临的主要挑战&#xff0c;并且实现电磁兼容性(EMC)与使设备正常运行同等…

使用高级SQL向量查询增强您的 RAG 应用程序

通过使用 MyScale 和 LangChain 创建 AI 助手来克服 RAG 的限制&#xff0c;以提高数据检索过程的准确性和效率。 让我们讨论一下如何使用 [MyScale]创建 AI 助手来克服这些 RAG 限制&#xff0c;从而提高数据检索过程的准确性和效率。我们将抓取 Hacker News 的最新故事&#…

鸿蒙轻内核A核源码分析系列七 进程管理 (2)

本文先熟悉下进程管理的文件kernel\base\core\los_process.c中的内部接口&#xff0c;读读代码&#xff0c;做些记录。 1、LiteOS-A内核进程全局变量 ⑴是进程池&#xff0c;存放各个进程控制块LosProcessCB的信息。⑵处开始的g_freeProcess是空闲进程链表&#xff0c;挂载各…

DevExpress WPF中文教程:Grid - 如何完成列和编辑器配置(设计时)?

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

【GreenHills】如何使用GHS对于不同的文件进行文档内容对比

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 利用GHS对于不同的文件进行对比。 2、 问题场景 在项目开发过程中&#xff0c;会对于工程进行版本管理&#xff0c;对于没有项目管理工具的客户&#xff0c;想要对于当前版本的源文件和上一版或其他版本的源文件进行…

RT-DETR那么火,如何使用它、如何改进它?热滚滚的使用攻略出炉了

前言 RT-DETR是百度出品的新一代检测器&#xff0c;属于DETR系列&#xff0c;即基于Transformer的目标检测框架。官方代码是基于Paddle平台的&#xff0c;当然也有Pytorch版本的&#xff0c;对于习惯使用Pytorch平台和YOLO风格的研究人员而言&#xff0c;调试和改进RT-DETR是比…