进程和线程
1.实现多线程
进程:是正在运行的程序
是系统进行资源分配和调用的独立单位
每一个进程都有它自己的内存空间和系统资源
线程:是进程中的单个顺序控制流,是一条执行路径
单线程:一个进程如果只有一条执行路径,则称为单线程程序 举例:记事本程序
多线程:一个进程如果有多条执行路径,则称为多线程程序 举例:扫雷程序
多线程的实现方法
方法1:继承Thread类
定义一个类MyThread继承Thread类
在MyThread类中重写run()方法
创建MyThread类的对象
启动线程
为什么要重写run()方法
因为run()是用来封装被线程执行的代码
run()方法和start()方法的区别
run()封装线程执行的代码,直接调用,相当于普通方法的调用
start()启动线程;然后由JVM调用此线程的run()方法
package com.aynu14;
//方法1:继承Thread类
// 定义一个类MyThread继承Thread类
// 在MyThread类中重写run()方法
// 创建MyThread类的对象
// 启动线程public class MyThreadDemo {public static void main(String[] args) {MyThread my1=new MyThread();MyThread my2=new MyThread();// my1.run();
// my2.run();//void start()导致此线程开始执行;java虚拟机调用此线程的run方法my1.start();my2.start();}
}
设置和获取线程名称
Thread类中设置和获取线程名称的方法
void setName(String name):将此线程的名称更改为等于参数name
String getName():返回此线程的名称
通过构造方法也可以设置线程名称
如何获取main()方法所在的线程名称
public static Thread currentThread():返回对当前正在执行的线程对象的引用
package com.aynu14;//Thread类中设置和获取线程名称的方法
// void setName(String name):将此线程的名称更改为等于参数name
// String getName():返回此线程的名称public class MyThreadDemo {public static void main(String[] args) {
// MyThread my1=new MyThread();
// MyThread my2=new MyThread();
//my1.run();my2.run();
//
// // void setName(String name):将此线程的名称更改为等于参数name
// my1.setName("高铁");
// my2.setName("飞机");//Thread(String name)
// MyThread my1 = new MyThread("高铁");
// MyThread my2 = new MyThread("飞机");
//
// //void start()导致此线程开始执行;java虚拟机调用此线程的run方法
// my1.start();
// my2.start();//static Thread currentThread()返回对当前正在执行的线程对象的引用System.out.println(Thread.currentThread().getName());}
}
package com.aynu14;public class MyThread extends Thread{public MyThread(){}public MyThread(String name){super(name);}@Overridepublic void run() {for (int i=0;i<100;i++){System.out.println(getName()+":"+i);}}
}
线程调度:
线程有两种调度模型
分时调度模型:所以线程轮流使用CPU的使用权,平均分配每个线程占用CPU的时间片
抢占式调度模型:优先让优先级高的线程使用CPU,如果线程的优先级相同,那么会随机选择一个,优先级高的线程获取的CPU时间片相对多一些
java使用的是抢占式调度模型
例如计算机只有一个CPU,那么CPU在某一个时刻只能执行一条指令,线程只有得到CPU的时间片,也就是使用权,才可以执行指令。所以说多线程程序的执行是有随机性,因此谁抢到CPU的使用权是不一定的
Thread类中设置和获取线程优先级的方法
public final int getPriority():返回此线程的优先级
public final void setPriority(int newPriority):更改此线程的优先级
线程默认优先级是5;线程优先级范围是1~10
线程优先级高仅仅表示线程获取的CPU时间片的几率高,但是要在次数比较多,或者多次运行时候才能看到你想要的结果
package com.aynu14;//Thread类中设置和获取线程优先级的方法
// public final int getPriority():返回此线程的优先级
// public final void setPriority(int newPriority):更改此线程的优先级public class ThreadPriorityDemo {public static void main(String[] args) {ThreadPriority tp1=new ThreadPriority();ThreadPriority tp2=new ThreadPriority();ThreadPriority tp3=new ThreadPriority();tp1.setName("高铁");tp2.setName("飞机");tp3.setName("汽车");// public final int getPriority():返回此线程的优先级System.out.println(tp1.getPriority()); //5System.out.println(tp2.getPriority()); //5System.out.println(tp3.getPriority()); //5// public final void setPriority(int newPriority):更改此线程的优先级
// tp1.setPriority(10000); //IllegalArgumentException
// System.out.println(Thread.MAX_PRIORITY);
// System.out.println(Thread.MIN_PRIORITY);
// System.out.println(Thread.NORM_PRIORITY);//设置正确的优先值tp1.setPriority(5);tp2.setPriority(10);tp3.setPriority(1);tp1.start();tp2.start();tp3.start();}
}
线程控制:
| 方法名 | 说明 |
| static void sleep(long millis) | 使当前正在执行的线程停留(暂停执行)指定的毫秒数 |
| void join() | 等待这个线程死亡 |
| void setDaemon(boolean on) | 将此线程标记为守护线程,当运行的线程都是守护线程时,java虚拟机将退出 |
线程生命周期

多线程的实现方式
方式2:实现Runnable接口
定义一个类MyRunnable实现Runnable接口
在MyRunnable类中重写run()方法
创建MyRunnable类的对象
创建Thread类的对象,把MyRunnable对象作为构造方法的参数
启动线程
多线程的实现方案有两种
继承Thread类
实现Runnable接口
相比继承Thread类,实现Runnable接口的好处
避免了java单继承的局限性
适合多个相同程序的代码去处理同一个资源的情况,把线程和程序的代码、数据有效分离,较好的体现了面向对象的设计思想
相关文章:
进程和线程
1.实现多线程 进程:是正在运行的程序 是系统进行资源分配和调用的独立单位 每一个进程都有它自己的内存空间和系统资源 线程:是进程中的单个顺序控制流,是一条执行路径 单线程:一个进程如果只有一条执行路径,则称为单线…...
ps 备忘清单_开发速查表分享
ps 命令速查备忘清单 Linux我们提供了一个名为 ps 的实用程序,用于查看与系统上的进程相关的信息,它是 Process Status 的缩写这份 ps 命令备忘清单的快速参考列表,包含常用选项和示例。入门,为开发人员分享快速参考备忘单。 开…...
【ROS】基于WIFI网络实现图像消息跨机实时传输
【开发背景】 研究机器人目标检测算法的时候,常常需要把推理图像实时展示出来,以供观摩。而ROS1提供的跨机通信方法,要么是配置单Master,要么是配置多Master;一方面配置麻烦,另一方面传输效率低下…...
一次性说清楚 JAVA的 ThreadPoolExecutor 、newFixedThreadPool 和newCachedThreadPool 等
目录 1、Executors.newCachedThreadPool() 与 Executors.newFixedThreadPool(n) 的区别是什么? 2、Executors.newCachedThreadPool() 与 Executors.newFixedThreadPool(n) 可以调参吗,比如线程大小,线程等待时间 等等 3、newCachedThreadP…...
Android双目三维重建:Android双目摄像头实现双目测距
Android双目三维重建:Android双目摄像头实现双目测距 目录 Android双目三维重建:Android双目摄像头实现双目测距 1.开发版本 2.Android双目摄像头 3.双目相机标定 (1)双目相机标定-Python版 (2)双目相机标定-Matlab版 4.相机参数配置 5.Android 双…...
解决Avoid using non-primitive value as key, use string/number value instead.
Avoid using non-primitive value as key, use string/number value instead. 意思是:避免使用非基本值作为键,而是使用字符串/数字值。 Duplicate keys detected: [object Object]. This may cause an update error. 意思是:检测到重复键:[o…...
重构·改善既有代码的设计.03之重构手法(上)
1. 前言 之前的重构系列中,介绍了书中提到的重构基础,以及识别代码的坏味道。今天继续第三更,讲述那些重构手法(上)。看看哪些手法对你的项目能有所帮助… 2. 重新组织函数 对函数进行整理,使之更恰当的…...
闭关修炼(0.0 pytorch基础学习)1
基于官网pytorch.org pytorch 动态 比较优秀 py3.7支持是最多的啦 原来anaconda 是蟒蛇的意思 细思极恐 python 是蛇 yi Introduction to PyTorch Tensors — PyTorch Tutorials 2.0.0cu117 documentation omygaga 英语极差 哈哈哈 tensor 多维数组 矩阵二维数组 Tensor…...
个人-计算机操作系统第一章
一、章节习题 1.操作系统的目标与应用环境有关,如分时系统,希望能提供良好的()能力。 A、批处理B、可靠性C、稳定性D、人-机交互 2.()是应用程序取得OS所有服务的唯一途径。 A、系统调用B、作业调度C、键…...
Python-责任链模式
介绍 责任链模式是一种行为型设计模式,它允许多个对象以链式的形式依次处理请求,直到请求被处理或者无处理对象为止 实现方式 责任链模式由多个处理器组成,每个处理器都可以处理一种请求。如果当前处理器无法处理请求,它将把请…...
HIT 计统实验2 二进制炸弹(gdb破解版) 拆弹过程
CSAPP 实验2是一个很好玩的实验,网上有很多参考资源写的都很好,本文增加了一些具体细节。 想要我的炸弹可以私信我。 还得看形式语言 , 炸弹6 7 有时间再拆 第1章 实验基本信息 1.1 实验目的 熟练掌握计算机系统的ISA指令系统与寻址方式熟练掌握Linu…...
echart 半环渐变仪表盘
实现效果如图: op配置项代码: let Chart this.$echarts.init(document.getElementById(dashboard-1));let option {// backgroundColor: #040d2e,series: [// 中间灰色轴线{type: gauge,radius: 150%, // 位置center: [50%, 90%],startAngle: 180,end…...
【springboot】自动加载分析
文章目录问题SpringBootApplication注解AutoConfigurationPackages.Registrar类AutoConfigurationImportSelector类springboot如何加载其他的starter总结问题 为什么我们在使用springboot的时候,只需要在maven中导入starter就能够使用呢?这里来分析一下…...
ChatGPT批量翻译-ChatGPT批量生成多国语言
ChatGPT翻译的准吗 ChatGPT是一种基于Transformer架构的自然语言处理技术,其翻译准确性取决于所训练的模型和数据集的质量。在特定的语料库和训练数据下,ChatGPT可以实现一定程度的准确翻译。但是,与人工翻译相比,ChatGPT的翻译质…...
Symble
ES6引入了一种新的原始数据类型 Symbol,表示独一无二的值。它是JavaScript语言的第七种数据类型,是一种类似于字符串的数据类型。 Symbol特点 Symbol 的值是唯一的,用来解决命名冲突的问题 Symbol值不能与其他数据进行运算 Symbol定义的对…...
能在家里赚钱的工作有哪些?适合普通人的兼职项目
当下对于普通人而言,想在社会上找到一份舒心安逸的工作很难,特别是在薪酬待遇这方面,更是低得让人心寒。那么,如果能有一份在家就可以做的事情,而且是收入也不少,那将是很多普通人的最佳选择。在这里&#…...
创建SaaS产品帮助中心的关键步骤
帮助中心是一款SaaS产品必不可少的一部分,为了帮助用户更好的解决产品相关问题,提高新用户的使用体验,并且引导用户更好的使用产品,那么应该怎样制作帮助中心呢,每个产品帮助中心都需要有自己的风格,根据产…...
高频算法:Leetcode53 最大子数组和
今天讲的是Leetcode第53题,最大子数组和 首先观察题目,题目需要我们找出具有最大和的连续子数组,直接拿题目中的示例来做一个演示,找一找什么规律下的连续子数组才能得到最大的和 先从-2开始,-2 1 -1 此时我们的和…...
如何编写接口自动化测试框架、
编写接口自动化测试框架需要注意以下几点: 接口选择:首先确定需要测试的接口,包括请求方式、URL、参数、返回值等信息。 框架设计:设计一个灵活的框架,可以根据接口类型(RESTful API、SOAP API等ÿ…...
【Java面试八股文宝典之RabbitMQ篇】备战2023 查缺补漏 你越早准备 越早成功!!!——Day17
大家好,我是陶然同学,软件工程大三即将实习。认识我的朋友们知道,我是科班出身,学的还行,但是对面试掌握不够,所以我将用这100多天更新Java面试题🙃🙃。 不敢苟同,相信大…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
第三周 Day 3 🎯 今日目标 理解类(class)和对象(object)的关系学会定义类的属性、方法和构造函数(init)掌握对象的创建与使用初识封装、继承和多态的基本概念(预告) &a…...
数据结构:递归的种类(Types of Recursion)
目录 尾递归(Tail Recursion) 什么是 Loop(循环)? 复杂度分析 头递归(Head Recursion) 树形递归(Tree Recursion) 线性递归(Linear Recursion)…...
论文阅读:Matting by Generation
今天介绍一篇关于 matting 抠图的文章,抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法,已经有很多的工作和这个任务相关。这两年 diffusion 模型很火,大家又开始用 diffusion 模型做各种 CV 任务了&am…...
