Java多线程(一)——多线程的创建

news2025/8/7 23:13:19

多线程

在计算机中为了提高内存和资源的利用率,引入了并发编程的思想;多进程和多线程都能实现并发编程,但是多线程相对于多进程更“轻量”,(多线程和多线程的关系和区别),所以这篇博客将着重讲解一下多线程相关的知识。

创建多线程

创建一个多线程

在Java中,创建线程通常使用Thread类来实例化对象,因为该类封装了很多可以调用操作系统内核的API
代码如下:

class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("hello Thread");
    }
}
public class ThreadDemo {
    public static void main(String[] args) {
        Thread t = new MyThread();
        t.start();

        System.out.println("hello main");
    }
}

在这里插入图片描述

这里有两个线程,分别是主线程main和我们创建的新线程(主线程调用新线程),第一行代码实例化了一个t对象(注意这里并没有创建线程),t调用start方法之后在操作系统内核创建了一个PCB,PCB通过调用CPU来执行相关的指令。

run()和start()的区别

在main方法中我们可以看出,为了执行MyThread类中的run方法时并不是让t直接调用run方法的,而是调用start方法去执行run方法,这是为什么呢?
run方法:主要描述的该线程所要执行的任务,并不会创建线程
start方法:真正实现了新线程的创建,在操作系统内核创建了一个PCB,PCB通过调用CPU来执行相关的指令
换一个角度想一下:如果把找个的t.start()改成了t.run()的话,那么就相当于在main方法中去调用MyThread类中的方法,这里就只有一个主线程main了,不能实现多线程的操作了

创建线程的5中方法

法一:继承Thread重写run

class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("hello Thread");
    }
}
public class ThreadDemo {
    public static void main(String[] args) {
        Thread t = new MyThread();
        t.start();

        System.out.println("hello main");
    }
}

法二:实现Runnable接口

class MyRunnable implements Runnable {

    @Override
    public void run() {
        System.out.println("hello Thread");
    }
}
public class ThreadDemo {
    public static void main(String[] args) {
        Runnable runnable = new MyRunnable();
        Thread t = new Thread(runnable);
        t.start();
        
        System.out.println("hello main");
    }
}

法三:使用匿名内部类继承Thread

public class ThreadDemo {
    public static void main(String[] args) {
        Thread t = new Thread() {
            @Override
            public void run() {
                System.out.println("hello Thread");
            }
        };
        t.start();

        System.out.println("hello main");
    }
}

法四:使用匿名内部类实现Runnable

public class ThreadDemo {
    public static void main(String[] args) {
        Thread t = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("hello Thread");
            }
        });
        t.start();

        System.out.println("hello main");
    }
}

法五:使用Lambda表达式(最为简洁,推荐使用

public class ThreadDemo {
    public static void main(String[] args) {
        Thread t = new Thread(() -> {
            System.out.println("hello Thread");
        });
        t.start();

        System.out.println("hello main");
    }
}

多线程执行的顺序

上述展现了5种创建线程的方法,但是新线程和主线程main哪个会先执行呢?
线程在CPU上的调度是抢占式执行的,哪个线程先抢到CPU的资源哪个线程就会先执行(由操作系统内核来决定),在应用程序层面我们无法得知,所以执行顺序是随机的

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

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

相关文章

CPU

文章目录CPU是什么CPU的构成1) 控制器2) 运算器3) 存储单元(寄存器和高速缓存)常见的CPU类型1) 单核 CPU2) 双核 CPU3) 四核 CPUCPU是什么 CPU 全称 Central Processing Unit,中文可译为中央处理器或者微处理器,或直接简称为处理…

挂脖式运动蓝牙耳机推荐,目前适合运动佩戴的五款耳机推荐

在科技的不断进步下,新型的骨传导耳机也是逐渐成为我们生活日常中的主流,其特殊的发声原理成为了我们喜爱的重点之一,也有些伙伴们还在边缘徘徊,想要入手骨传导耳机但又怕踩坑得不到好的体验,刚好小编在使用骨传导耳机…

【用户画像】应用场景

目前所做工作的主要业务场景:干货|一文从0到1掌握用户画像知识体系_腾讯新闻 广告联盟? 所谓广告联盟是什么呢?? 案例背景 某电商App的商品运营团队欲提升电子产品的老客复购率、新客下单率,于是选择了…

Tomcat常见问题解决方法总结,无法自动,无法访问,控制台乱码

Tomcat无法启动,无法访问 新下载的Tomcat,运行startup.bat后一闪而过,无法启动Tomcat服务。 可能会有这样的效果 可以在CMD窗口下进入Tomcat安装目录,运行startup可以看到报错信息。 可能有一下原因: 首先检查JAVA…

使用gitee部署静态网页

使用giteepages功能部署网页 需求 假如你辛辛苦苦写好了一个静态网页,很想要炫耀一下,让大家都可以通过公网访问看到我的网页。但是不想太麻烦,买服务器,安装软件,部署环境,配置域名,备案&…

通达信软件L2接口的委托队列有什么用?

如果我们开通了通达信Level 2接口,打开任意个股分时图,首先可以看到买一和卖一的部分委托(如下图红框处)。 点击【查看更多】,选择【委托队列】栏目,则可以看到完整的前50笔的委托买卖队列的数量。 而这些密…

【修电脑】VMware 从GHO文件备份恢复Win10/Win7系统

【修电脑】VMware 从GHO文件备份恢复Win10/Win7系统注意参考硬盘知识一、硬盘接口的分类二、硬盘的分类按照硬盘材质分为两大类按照接口类型区分boot启动知识Legacy BIOS引导uefi引导启动流程查看系统的引导启动方式1.VMware 新建win10 x64系统2.制作老毛桃U盘winpe3.VMware wi…

Linux C/C++ 学习笔记(七):DNS协议与请求

本文部分内容参考Linux C/C 开发(学习笔记九 ):DNS协议与请求的实现_菊头蝙蝠的博客-CSDN博客_struct dns 一、DNS的介绍 域名系统(英文:Domain Name System,缩写:DNS)的作用是将人…

佰维存储通过注册:拟募资8亿 国家集成电路基金是二股东

雷递网 雷建平 11月23日深圳佰维存储科技股份有限公司(简称:“佰维存储”)日前通过注册,准备在科创板上市。佰维存储计划募资8亿元,3亿元用于惠州佰维先进封测及存储器制造基地建设项目,2亿元用于先进存储器…

基于FME Desktop和FME Server的数据增量自动更新

一、自动更新的意义 自动更新使数据保持良好的现势性,具有良好现势性的数据可以准确反映最新情况,为领导者决策分析判断提供有力保障。 一年一度的国土变更调查就是国家为了及时全面查清我国土地利用状况,掌握详实准确的土地基础数据现势情…

项目分享:新年可以做的副业项目,红包封面制作

新的一年即将到来。今天想推荐一个非常暴力和稳定的项目,红包封面。这个项目在春节期间特别强大,因为新年包已经成为中国人的传统,从原来的纸包到现在的VX包已经成为一项必不可少的活动。因此,从需求的角度来看,这个项…

Linux 搭建本地镜像源(CentOS 离线 yum)

使用 RPM 包搭建本地镜像源 1. 下载所有源中的 RPM 包 yum -y install httpd yum-utils createrepo 创建 RPM 包的下载目录 mkdir /var/www/html/centos启动 httpd 服务 [rootlocalhost ~]# systemctl start httpd [rootlocalhost ~]# ss -antulp | grep :80 tcp LISTEN …

nerdctl 工具(用于 containerd 但兼容 docker CLI 习惯)

简介 nerdctl 是用于 containerd 并且 兼容 docker cli 习惯的管理工具,主要适用于刚从 docker 转到 containerd 的用户,操作 containerd 的命令行工具 ctr 和 crictl 不怎么好用,所以就有了 nerdctl。 要特别说明的是:nerdctl …

还在每天玩单调的控制台窗口?赶紧进来!!!用EasyX画出自己的优美窗口(万字教程,一文入门)

EasyX图形库教程 本文的封面第三章照片来自博客:爱心气球 文章目录EasyX图形库教程前言1.EasyX是什么?2.EasyX的安装开始教程1.基本概念1.1颜色1.2坐标2.创建窗口 -- 基本框架3.颜色设置3.1背景颜色3.2设置线条颜色3.3设置文本颜色3.4设置填充颜色4样式…

计算机毕业设计之java+ssm家校通网站

项目介绍 随着网络技术的飞速发展,网络已渗透到全人类的各个方面,深刻影响着我们的生活和工作方式。家校通网站给教育带来了更广阔的发展空间。家校通网站有对部分类似网站进行分析,找到规律和方法,吸取其特点,构思自…

Win11关闭Superfetch服务的操作方法分享

Win11关闭Superfetch服务的操作方法分享。有用户发现自己电脑在开机的时候,都会出现Superfetch服务的相关程序进程。为了优化自己的运行内存,想要将这个功能给进行关闭。那么电脑的Superfetch服务怎么去关闭,一起来看看关闭的方法吧。 操作方…

天宇优配|北上广深角逐“国字号”数据交易所 行业爆点

今日,上海数据生意地点揭牌一周年之际,将发动数据生意节,并将探究树立数交所国际板。10天前,深圳数据生意所正式揭牌。至此,北上广深四个一线城市均已树立数据生意所。 数据作为新型生产要素,正成为各地争相…

想过为什么家里的IP是192.168开头的吗?

为什么我们家里的IP都是192.168开头的? 是的,就是我,先不做什么技术博主了,做个老情感博主(手动狗头)。 来讲个故事。 资深老舔狗小王今天很兴奋,说什么也要请大家喝奶茶。 因为他说他感觉要跟…

基于ModelCoder的汽车悬挂系统建模

悬挂系统是汽车的车架与车桥或车轮之间的一切传力连接装置的总称,其功能是传递作用在车轮和车架之间的力和力矩,并且缓冲由不平路面传给车架或车身的冲击力,衰减由此引起的振动,以保证汽车平顺行驶。 悬挂系统主要功能为支持车身…

事业编招聘:国家无线电监测中心2022年公开招聘

一、单位简介 国家无线电监测中心检测中心是国家无线电监测中心/国家无线电频谱管理中心下属的独立事业法人机构,主要从事无线电技术领域的检测认证、产品研发、科研标准、行业咨询和政府支撑等工作,在北京、河北永清、广东深圳、上海、湖南长沙、四川成…