Java多线程-初阶1

 博主主页: 码农派大星.

    数据结构专栏:Java数据结构

 数据库专栏:MySQL数据库

JavaEE专栏:JavaEE

关注博主带你了解更多数据结构知识


1. 认识线程(Thread)

1.线程是什么

⼀个线程就是⼀个 "执⾏流". 每个线程之间都可以按照顺序执⾏⾃⼰的代码. 多个线程之间 "同时" 执⾏ 着多份代码

2. 为啥要有线程

通过写特殊的代码,把多个cpu核心,都能利用起来,这样的代码就叫并发编程.

多进程编程就是一种典型的并发编程.

虽然多进程能够解决问题,但随着对效率的要求越来越高,就希望出现更好的方式来实现并发编程.

多进程的缺点就是太"重".

创建进程,销毁进程(最典型就是服务器开发),开销都比较大(时间,空间).

虽然多进程也能实现 并发编程, 但是线程⽐进程更轻量.

创建线程⽐创建进程更快.

• 销毁线程⽐销毁进程更快.

• 调度线程⽐调度进程更快

线程虽然⽐进程轻量, 但是⼈们还不满⾜, 于是⼜有了 "线程池"(ThreadPool) 和 "协程" (Coroutine)

3.进程和线程的区别

进程是包含线程的. 每个进程⾄少有⼀个线程存在,即主线程。

进程和进程之间不共享内存空间. 同⼀个进程的线程之间共享同⼀个内存空间.

进程是系统分配资源的最⼩单位,线程是系统调度的最⼩单位

⼀个进程挂了⼀般不会影响到其他进程. 但是⼀个线程挂了, 可能把同进程内的其他线程⼀起带⾛(整个进程崩溃).

4.Java 的线程和操作系统线程的关系

线程是操作系统中的概念. 操作系统内核实现了线程这样的机制, 并且对⽤⼾层提供了⼀些 API 供⽤⼾ 使⽤(例如 Linux 的 pthread 库).

Java 标准库中 Thread 类可以视为是对操作系统提供的 API 进⾏了进⼀步的抽象和封装.

5. 创建线程 

⽅法1 继承 Thread 类

继承 Thread 来创建⼀个线程类.

class MyThread extends Thread{
    @Override
    public void run() {
        //这里就是即将创建线程,要执行的逻辑
        System.out.println("hello,Thread!");
    }
}
public class Demo1 {
    public static void main(String[] args) {
        MyThread t = new MyThread();
        //创建线程
        t.start();
    }
}

 创建 MyThread 类的实例

MyThread t = new MyThread();

调⽤ start ⽅法启动线程 

t.start();

⽅法2 实现 Runnable 接⼝ 

实现 Runnable 接⼝

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

创建 Thread 类实例, 调⽤ Thread 的构造⽅法时将 Runnable对象作为 Thread 参数.

 Thread t = new Thread(runnable);

调⽤ start ⽅法

 t.start();

其他变形 

匿名内部类创建 Thread ⼦类对象

public class Demo3 {
    public static void main(String[] args) {
        Thread t = new Thread(){
            @Override
            public void run() {
                while (true){
                    System.out.println("hello Thread!");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };
        t.start();
    }
}

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

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

相关文章

动态规划7:LCR 166. 珠宝的最高价值

动态规划解题步骤: 1.确定状态表示:dp[i]是什么 2.确定状态转移方程:dp[i]等于什么 3.初始化:确保状态转移方程不越界 4.确定填表顺序:根据状态转移方程即可确定填表顺序 5.确定返回值 题目链接:LCR …

sap 应用日志-Application Log

文章目录 sap 应用日志-Application Log概念事务代码函数创建程序显示配置文件运行结果弹出式全屏式 程序剖析清空日志创建日志模拟数据添加日志消息显示日志BAL_DSP_LOG_DISPLAY-显示内存消息 全部程序 sap 应用日志-Application Log 概念 SAP 应用日志(Applicat…

别等了!速来体验 GLM-4-9B-Chat

昨日,智谱 AI 发布了基座大模型 GLM-4 的最新开源成果——GLM-4-9B,首次拥有了多模态能力。官方给出的数据显示,对比训练量更多的 Llama-3-8B 模型,GLM-4-9B 在中文学科方面的提升高达 50%,在多模态方面可以比肩 GPT-4…

新手上路:Linux虚拟机创建与Hadoop集群配置指南①(未完)

一、基础阶段 Linux操作系统: 创建虚拟机 1.创建虚拟机 打开VM,点击文件,新建虚拟机,点击自定义,下一步 下一步 这里可以选择安装程序光盘映像文件,我选择稍后安装 选择linux系统 位置不选C盘,创建一个新的文件夹VM来放置虚拟机,将虚拟机名字改为master方便后续识别…

白酒:茅台镇白酒的地域特色与环境优势

茅台镇,位于中国贵州省仁怀市,因其与众不同的自然环境和酿酒工艺而成为世界著名的白酒产区。作为茅台镇的品牌,云仓酒庄豪迈白酒以其卓着的品质和口感赢得了广大消费者的喜爱。而这一切,都离不开茅台镇的地域特色和环境优势。 茅台…

【星海出品】Jenkins

Jenkins部署环境 基本环境: 1.jdk环境,Jenkins是java语言开发的,因需要jdk环境。 2.git/svn客户端,因一般代码是放在git/svn服务器上的,我们需要拉取代码。 3.maven客户端,因一般java程序是由maven工程&a…

SQL Developer管理RESTful 服务

RESTful 服务依赖于ORDS(Oracle REST Data Services),所以在进行本实验前,请先确认数据库服务器上的ORDS服务已启动: $ systemctl status ords ● ords.service - Oracle REST Data ServicesLoaded: loaded (/etc/sys…

YOLOv10(1):初探,训练自己的数据

目录 1. 写在前面 2. 值得关注的点 3. 训练自己的数据集 4. 阅读代码的小建议 1. 写在前面 很多人YOLOv9还没有完全研究透,YOLOv10出来了。 惊不惊喜,意不意外! 据论文里提到,YOLOv10就是为了加速推理,在保证精度的…

天锐绿盾|防止源代码泄露系统,如何防止开发部门源码外泄?

#源代码防止泄露# 天锐绿盾是一款专为企业设计的数据安全软件,尤其擅长防止开发部门的源代码外泄,它通过一系列综合性的安全策略和技术手段实现这一目标。 PC地址: https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5d…

nesting in wrf

Choices for Nesting are:0 no nesting (only available for serial and smpar) 0. no nesting (only available for serial and smpar)1. basic2. preset moves preset moves3. vortex following • default is option 0 for serial/smpar, 1 for dmpar • smpar Shared Mem…

Linux环境---在线安装jdk

Linux环境—在线安装jdk 一、使用步骤 1.安装环境 JDK版本:1.8 1.1 建立存放软件的目录 注意:此处本人是将需要按照的软件存放在directory目录下,可根据实际情况调整接收路径。 命令如下: mkdir directory2.安装jdk 2.1 建…

Paperless-Ngx文档管理系统结合内网穿透实现随时远程搜索查阅文本

文章目录 前言1. 部署Paperless-ngx2. 本地访问Paperless-ngx3. Linux安装Cpolar4. 配置公网地址5. 远程访问6. 固定Cpolar公网地址7. 固定地址访问 前言 Paperless-ngx是一个开源的文档管理系统,可以将物理文档转换成可搜索的在线档案,从而减少纸张的使…

VS code上创建Vue项目详细化教程2-配置并创建Vue项目

目录 1. 环境准备 1.1 Node.js环境配置 1.1.1 安装Node.js 1.1.2 Node配置全局安装目录: 1.2 安装Vue-cli 2. 工程化Vue项目创建 2.1 命令行形式 2.2 UI 界面(我们此处采用UI模式) 2.2.1 在文件目录下终端输入 2.2.2 创建新项目 2…

Ansys Mechanical|为了提高结果精度而提高网格划分质量

一.高质量网格划分的要求 1. 一个好的网格划分可以捕获到所有重要几何细节。 2. 差的网格质量会导致收敛困难或者对物理场的描述不佳。 注:收敛困难有助于突出网格相关的误差。但是,如果结果不正确地收敛,则会在应用中导致各种…

Vuforia AR篇(六)— Mid Air 半空识别

目录 前言一、什么是Mid Air?二、使用步骤三、示例代码四、效果 前言 增强现实(AR)技术正在改变我们与数字世界的互动方式。Vuforia作为先进的AR开发平台,提供了多种工具来创造引人入胜的AR体验。其中,Mid Air功能以其…

纷享销客集成平台(IPaaS)解决方案

针对传统对接方式中的痛点,集成平台提炼了一套成熟的解决方案和配套工具。 痛点1:编码工作量大。 每个功能点,和众多的容错分支,都需要逐行编码实现。日志打少了影响问题排查,打多了浪费大量存储。 集成…

Pinia的安装及使用

一、pinia是什么? Store (如 Pinia) 是一个保存状态和业务逻辑的实体,它并不与你的组件树绑定。换句话说,它承载着全局状态。它有点像一个永远存在的组件,每个组件都可以读取和写入它。它有三个概念,state、getter 和 …

【调试笔记-20240602-Linux-在 OpenWRT-23.05 上配置 frps 与 frpc 之间使用 TLS 进行传输】

调试笔记-系列文章目录 调试笔记-20240602-Linux-在 OpenWRT-23.05 上配置 frps 与 frpc 之间使用 TLS 进行传输 文章目录 调试笔记-系列文章目录调试笔记-20240602-Linux-在 OpenWRT-23.05 上配置 frps 与 frpc 之间使用 TLS 进行传输 前言一、调试环境操作系统:O…

hadoop疑难问题解决_NoClassDefFoundError: org/apache/hadoop/fs/adl/AdlFileSystem

1、问题描述 impala执行查询:select * from stmta_raw limit 10; 报错信息如下: Query: select * from sfmta_raw limit 10 Query submitted at: 2018-04-11 14:46:29 (Coordinator: http://mrj001:25000) ERROR: AnalysisException: Failed to load …

QLocalSocket和QLocalServer

一步一步来吧,不可能一口吃成一个胖子. 看不懂大块的代码,至少可以看懂一个小demo,一小部分代码,小demo看的多了,慢慢也就可以看懂更多代码啦.加油! 不要着急啦! QLocalServer和QLocalSocket单进程和进程通信 - wjbooks - 博客园 (cnblogs.com) QLocalSocket 1.生成随机数 Q…