当前位置: 首页 > news >正文

多线程(一)

多线程

  • 多线程概念
  • 线程和进程的区别
  • Java 的线程 和 操作系统线程 的关系
  • 创建线程

多线程概念

多线程,也称为并发执行,是一种编程技术,它允许在单个应用程序中同时运行多个独立的任务或操作。一个线程就是一个 “执行流”. 每个线程之间都可以按照顺讯执行自己的代码. 多个线程之间 “同时” 执行着多份代码.

线程和进程的区别

  • 进程是包含线程的. 每个进程至少有一个线程存在,即主线程。
  • 进程和进程之间不共享内存空间. 同一个进程的线程之间共享同一个内存空间.
  • 进程是系统分配资源的最小单位,线程是系统调度的最小单位

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

线程是操作系统中的概念. 操作系统内核实现了线程这样的机制, 并且对用户层提供了一些 API 供用户使用(例如 Linux 的 pthread 库).
Java 标准库中 Thread 类可以视为是对操作系统提供的 API 进行了进一步的抽象和封装.

创建线程

1: 继承 Thread 来创建一个线程类.

class MyThread extends Thread {@Overridepublic void run() {System.out.println("这里是线程运行的代码");}}

1.2: 创建 MyThread 类的实例

MyThread t = new MyThread()

1.3调用 start 方法启动线程

2:实现 Runnable 接口

class MyRunnable implements Runnable {@Overridepublic void run() {System.out.println("这里是线程运行的代码");}

2.2创建 Thread 类实例, 调用 Thread 的构造方法时将 Runnable 对象作为 target 参数

Thread t = new Thread(new MyRunnable());

2.3 调用 start 方法

t.start(); // 线程开始运行

注意:
继承 Thread 类, 直接使用 this 就表示当前线程对象的引用.
实现 Runnable 接口, this 表示的MyRunnable 的引用. 需要使用 Thread.currentThread()

其他变形

  • 匿名内部类创建 Thread 子类对象
  • 匿名内部类创建 Runnable 子类对象
  • lambda 表达式创建 Runnable 子类对象
// 使用匿名类创建 Thread 子类对象
Thread t1 = new Thread() {@Overridepublic void run() {System.out.println("使用匿名类创建 Thread 子类对象");}
};
// 使用匿名类创建 Runnable 子类对象
Thread t2 = new Thread(new Runnable() {@Overridepublic void run() {System.out.println("使用匿名类创建 Runnable 子类对象");}
});
// 使用 lambda 表达式创建 Runnable 子类对象
Thread t3 = new Thread(() -> System.out.println("使用匿名类创建 Thread 子类对象"));
Thread t4 = new Thread(() -> {System.out.println("使用匿名类创建 Thread 子类对象");
})

相关文章:

  • 【力扣】查找总价格为目标值的两个商品,双指针法
  • Mac 下JDK环境变量配置 及 JDK多版本切换
  • 吉他学习:识谱,认识节奏,视唱节奏,节拍器的使用
  • 2402d,d的静态构造器
  • 多线程基础详解(看到就是赚到)
  • 预测模型:MATLAB线性回归
  • 在 VMware 虚拟机上安装 CentOS系统 完整(全图文)教程
  • K8S之Pod常见的状态和重启策略
  • 人工智能之无约束最优化与有约束最优化
  • C# Task的使用
  • 编码技巧——基于RedisTemplate的RedisClient实现、操作Lua脚本
  • python二维数组初始化的一个极其隐蔽的bug(浅拷贝)
  • Win32 SDK Gui编程系列之--ListView自绘OwnerDraw(续)
  • 幻兽帕鲁(Palworld)允许自建私服,它是怎么挣钱的呢?
  • 融资项目——配置redis
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • Docker 笔记(2):Dockerfile
  • download使用浅析
  • js面向对象
  • js数组之filter
  • Linux链接文件
  • PHP的Ev教程三(Periodic watcher)
  • Promise面试题2实现异步串行执行
  • React系列之 Redux 架构模式
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 如何在GitHub上创建个人博客
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 线上 python http server profile 实践
  • 用mpvue开发微信小程序
  • 做一名精致的JavaScripter 01:JavaScript简介
  • $jQuery 重写Alert样式方法
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • %@ page import=%的用法
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)ssm码农论坛 毕业设计 231126
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (十八)SpringBoot之发送QQ邮件
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (一)基于IDEA的JAVA基础1
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)IOS中获取各种文件的目录路径的方法
  • .naturalWidth 和naturalHeight属性,
  • .NET 材料检测系统崩溃分析
  • .net 微服务 服务保护 自动重试 Polly
  • .NET 指南:抽象化实现的基类
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .net生成的类,跨工程调用显示注释
  • .Net中ListT 泛型转成DataTable、DataSet
  • @Autowired @Resource @Qualifier的区别
  • @TableId注解详细介绍 mybaits 实体类主键注解
  • [Android]使用Git将项目提交到GitHub
  • [BZOJ2208][Jsoi2010]连通数