java 进阶—线程的常用方法
大家好,通过java进阶—多线程,我们知道的什么是进程,什么是线程,以及线程的三种创建方式的选择
今天,我们来看看线程的基础操作
- start() 开启线程
public class Demo implements Runnable {@Overridepublic void run() {for (int i = 0; i < 3; i++) {System.out.println("线程开启我就跑");}}public static void main(String[] args) {Demo demo =new Demo();Thread thread =new Thread(demo);//开启线程 thread.start();}
}
- currentThread() 返回当前线程
currentThread() 获取了当前线程,里面可以获取当前线程的名字
1. getName(): 获取当前线程名字2. getId(): 获取当前线程名字
public class Demo implements Runnable{@Overridepublic void run() {System.out.println("当前线程:"+ Thread.currentThread());System.out.println("当前线程的名字:"+ Thread.currentThread().getName());System.out.println("当前线程的Id:"+ Thread.currentThread().getId());}public static void main(String[] args) {Demo demo =new Demo();Thread thread = new Thread(demo);thread.start();}
}
为什么是 默认是 Thread-0 ,是因为 Thread类里面的一个空参构造函数,
调用 nextThreadNum() 参数是从0 开始自增的
- setName() 设置线程的名字
觉得默认的 thread-0 名字不好?,没关系,我们可以自己设置 名字
public class Demo implements Runnable{@Overridepublic void run() {System.out.println("当前线程:"+ Thread.currentThread());System.out.println("当前线程的名字:"+ Thread.currentThread().getName());}public static void main(String[] args) {Demo demo =new Demo();Thread thread = new Thread(demo);thread.setName("我设置的线程名字");thread.start();}
}
- yield() 线程让步,释放当前CPU的执行
来看一个例子,主线程(mian)同 thread-0 线程 同时去执行 循环,去抢Cpu的执行权,我们在thread-0 线程加上 如果 循环出的值 %2 ==0 (是偶数)它就释放执行权
public class Demo implements Runnable {@Overridepublic void run() {for (int i = 0; i < 50; i++) {System.out.println(Thread.currentThread().getName() + ":" + i);if (i % 2 == 0) {Thread.yield();}}}public static void main(String[] args) {Demo demo = new Demo();Thread thread = new Thread(demo);thread.start();for (int i = 0; i < 50; i++) {System.out.println(Thread.currentThread().getName() + ":" + i);}}
}
当然,释放执行权并不是一定,也是有概率的,有可能下一个执行权还是 thread-0
- join() 让当前线程进入阻塞状态,被join线程执行完,再执行
举个例子:比如还是前面 thread-0 跟 主线程 抢占cpu执行权,现在我们在主线程中加一个 限制 条件,当主线程 循环到 10 时,让主线程进入阻塞状态,thread-0优先执行完,主线程再开始执行
public class Demo implements Runnable {@Overridepublic void run() {for (int i = 0; i < 50; i++) {System.out.println(Thread.currentThread().getName() + ":" + i);if (i % 2 == 0) {Thread.yield();}}}public static void main(String[] args) {Demo demo = new Demo();Thread thread = new Thread(demo);thread.start();for (int i = 0; i < 50; i++) {System.out.println(Thread.currentThread().getName() + ":" + i);if(i==10) {try {thread.join();} catch (InterruptedException e) {e.printStackTrace();}}}}
}
通过 thread-0线程去调用join方法 ,让 thread-0优先执行
可以看到 mian到了 10 时,就停止了,等thread-0 执行完,再开始
-
stop( ) 强制结束当前线程,方法已经过时,不建议使用 (开发中不要用)
-
sleep(毫秒值):让当前线程进入休眠时间,时间结束继续执行
public class Demo implements Runnable {@Overridepublic void run() {for (int i = 0; i < 50; i++) {System.out.println(Thread.currentThread().getName() + ":" + i);if (i %2==0) {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}}public static void main(String[] args) {Demo demo = new Demo();Thread thread = new Thread(demo);thread.start();for (int i = 0; i < 50; i++) {try {thread.join();} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName() + ":" + i);}}
}
当阻塞时间结束,也并不是直接执行,也得dengCPU分配给你。你再执行,在阻塞时间内,cpu 想分配资源给你都不行
- isAlive() 判断线程是否终止,这个线程是不是还活着
public class Demo implements Runnable {@Overridepublic void run() {for (int i = 0; i < 50; i++) {System.out.println(Thread.currentThread().getName() + ":" + i);if (i %2==0) {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}}public static void main(String[] args) {Demo demo = new Demo();Thread thread = new Thread(demo);thread.start();for (int i = 0; i < 50; i++) {try {thread.join();} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName() + ":" + i);}System.out.println("线程是否还存活:"+thread.isAlive());}
}
执行结果:
解析(看的懂得小伙伴可以略过): 我们在主线程中,直接加了 join, 所以得等主线程执行完成再执行主线程,由于我们是在主线程之后加的判断线程 thread-0是否存活,这时候 thread-0 已经执行完任务了,生命周期结束,所以此时的thread-0 已经终止了
以上便是线程最常用方法了
相关文章:
java 进阶—线程的常用方法
大家好,通过java进阶—多线程,我们知道的什么是进程,什么是线程,以及线程的三种创建方式的选择 今天,我们来看看线程的基础操作 start() 开启线程 public class Demo implements Runnable {Overridepublic void run…...
hadoop的运行模式
作者简介:大家好我是小唐同学(๑><๑),好久不见,为梦想而努力的小唐又回来了,让我们一起加油!!! 个人主页:小唐同学(๑><๑)的博客主页 目前…...
服务器(centos7.6)已经安装了宝塔面板,想在里面安装一个SVN工具(subversion),应该如何操作呢?
首先,在登录进入宝塔面板,然后点击左侧终端,进入终端界面,如下图:------------------------------------------如果是第一次使用会弹出输入服务器用户名和密码,此时输入root账号和密码,即可进入…...
从智能进化模型看用友BIP的AI平台化能力
随着人工成本的上升,智能和自动化技术的成熟,企业在越来越多的场景开始应用自动化技术来替代相对标准及有规则的工作,同时利用智能算法来优化复杂工作及决策,获得竞争优势。 不同于阅读、聊天、搜索等面向终端用户的应用场景&…...
项目管理的主要内容包括哪些?盘点好用的项目管理系统软件
阅读本文您将了解:1、项目管理的主要内容包括哪些2、好用的项目管理软件 项目管理是为了实施一个特定目标,所实施的一系列针对项目要素的管理过程,包括过程、手段以及技术等。 通过项目管理,我们能够提前安排和控制项目的时间、…...
Allegro如何查看PCB上器件的库路径操作指导
Allegro如何查看PCB上器件的库路径操作指导 在做PCB设计的时候,有时需要检查PCB上器件使用的库的路径是否正确,Allegro支持快速将PCB上所有器件的库路径都列出来 如下图 如何显示这个报表,具体操作如下 点击Tools点击Report...
笔记【尚硅谷】大数据Canal教程丨Alibaba数据实时同步神器
视频教程:【尚硅谷】大数据Canal教程丨Alibaba数据实时同步神器教程资料:https://pan.baidu.com/s/1VhGBcqeywM6jyXJxtytd1w?pwd6666,提取码:6666本套教程以Canal的底层原理展开讲解,细致地介绍了Canal的安装部署及常…...
如何重定向命令行日志信息到指定txt文件?
如果你想把命令行的输出重定向到指定的txt文件,你可以使用一些符号来实现。例如,你可以在命令后面加上>或>>符号,然后指定文件名。例如: command > output.txt 这样就会把command的标准输出保存到output.txt文件中&…...
物理机不能访问虚拟机kali的web服务解决方案记录
目录 环境 问题描述 解决方案 知识补充 效果测试 其他思路 环境 kali(nat模式),物理机,可互ping 问题描述 kali的web服务器不能在物理机上访问。 1.本机能ping通虚拟机 2.虚拟机也能ping通本机 3.虚拟机能访问自己的web …...
服务器配置 | 在Windows本地显示远程服务器绘图程序
文章目录方法1:在MobaXterm的终端输入指令方法2:在Pycharm中运行前提概要,需要在本地Windows端显示点云的3d可视化界面 对于点云的3d可视化一般有两种方法,open3d显示或者是mayavi显示。这两个库都可以使用pip install来实现安装…...
从0开始学python -47
Python CGI编程 -2 GET和POST方法 浏览器客户端通过两种方法向服务器传递信息,这两种方法就是 GET 方法和 POST 方法。 使用GET方法传输数据 GET方法发送编码后的用户信息到服务端,数据信息包含在请求页面的URL上,以"?"号分割…...
【数据结构】八大经典排序总结
文章目录一、排序的概念及其运用1.排序的概念2.常见排序的分类3.排序的运用二、常见排序算法的实现1.直接插入排序1.1排序思想1.2代码实现1.3复杂度及稳定性1.4特性总结2.希尔排序2.1排序思想2.3复杂度及稳定性2.4特性总结3.直接选择排序3.1排序思想3.2代码实现3.3复杂度及稳定…...
BI的能力边界:能解决的企业问题和不擅长的领域
数字化转型本就需要借助信息化相关技术、思想来完成,所以说信息化建设同样是数字化转型过程中非常重要的一环,而这就是商业智能BI和数字化转型的关系 BI 能解决的企业问题 数据是企业的重要资产,也是企业商业智能BI的核心要求。通常&#x…...
金三银四面试必备,“全新”突击真题宝典,阿里腾讯字节都稳了
前言招聘旺季就到了,不知道大家是否准备好了,面对金三银四的招聘旺季,如果没有精心准备那笔者认为那是对自己不负责任;就我们Java程序员来说,多数的公司总体上面试都是以自我介绍项目介绍项目细节/难点提问基础知识点考…...
MYSQL 基础篇 | 02-MYSQL基础应用
文章目录1 MySQL概述2 SQL2.1 SQL通用语法2.2 SQL分类2.3 DDL2.3.1 数据库操作2.3.2 表操作2.4 DML2.4.1 添加数据2.4.2 修改数据2.4.3 删除数据2.5 DQL2.5.1 基础查询2.5.2 条件查询2.5.3 聚合查询2.5.4 分组查询2.5.5 排序查询2.5.6 分页查询2.5.7 综合练习2.6 DCL2.6.1 管理…...
CSS实现checkbox选中动画
前言 👏CSS实现checkbox选中动画,速速来Get吧~ 🥇文末分享源代码。记得点赞关注收藏! 1.实现效果 2.实现步骤 定义css变量,–checked,表示激活选中色值 :root {--checked: orange; }创建父容器…...
工业机器人编程调试怎么学
很多人觉得工业机器人很难学学,实际上机器人涉及的知识远比PLC要少。现简单说明一下初学者学习工业机器人编程调试的流程,以AUBO机器人为例: 首先我们需要知道工业机器人的调试学起来不难,远比编程更简单,示教器上的编…...
Java并发包提供了哪些并发工具类?
第19讲 | Java并发包提供了哪些并发工具类? 通过前面的学习,我们一起回顾了线程、锁等各种并发编程的基本元素,也逐步涉及了 Java 并发包中的部分内容,相信经过前面的热身,我们能够更快地理解 Java 并发包。 今天我要…...
systemctl 启动/停止/重新加载 nginx
systemctl 启动/停止/重新加载 nginx 一、新建nginx.service脚本 sudo vim /usr/lib/systemd/system/nginx.service然后按iii进入编辑模式,粘贴如下内容,其中/usr/local/nginx/是进行make && make install之后的文件夹路径,需要根据…...
SSRF学习 3
目录 <1> 什么是SSRF? <2> 通常SSRF会发生在哪些位置? <3> 测试流程 <4> Weblogic-ssrf 复现 (1) 漏洞存在点 (2) 注入HTTP头,利用Redis反弹shell (3) 修复方案 <1> 什么是SSRF? SSRF(Serv…...
Mysql(数据库基础篇)
👌 棒棒有言:也许我一直照着别人的方向飞,可是这次,我想要用我的方式飞翔一次!人生,既要淡,又要有味。凡事不必太在意,一切随缘,缘深多聚聚,缘浅随它去。凡事…...
一种全新的图像变换理论的实验(五)——研究目的替代DCT和小波
一、前言 目前在大量的灰度图像测试下,基本确定变换系数ratio取值0-25之间时,逆变化后的图还能基本保障效果,而且越接近0效果越好。本文还是以lenna.bmp灰度图为例,实验不再逆变换,而是把变换后的数据直接输出为bmp的…...
vue3、vite、pinia 快速入门
准备 开发工具及插件IDE:vscode,WebStorm插件:Auto Close Tag、Auto Rename Tag、Live Server通过“!”快速生成html模板正式学习安装vue通过CDN的方式导入vue<script src"" target"_blank">https://unpkg.com/vue3/dist/vue.…...
第六章 effect.scheduler功能实现
effect.scheduler功能实现 主要先了解scheduler需要实现什么样的需求,有一下四点: 1 通过 effect 的第二个参数给定一个 scheduler 的 fn 2 effect 第一次执行的时候 还会执行 fn 3 当 响应式对象 set update 不执行fn 而是执行 scheduler 4 如果说…...
软件测试之zentao
禅道 1. 禅道介绍 1.1 禅道项目管理软件是做什么的? 禅道,国产开源项目管理软件。它集产品管理、项目管理、质量管理、文档管理、组织管理和事务管理于一体,是一款专业的研发项目管理软件,完整覆盖了研发项目管理的核心流程。禅…...
美颜sdk动态贴纸的实现流程
随着移动互联网时代的到来,各式各样的 APP层出不穷,从最初的微信、 QQ到如今的抖音、快手等等,再到如今的微博、小红书等等,各式各样的 APP不断涌现。从最开始简单的图片展示到视频聊天,再到现如今丰富多样的各种动态贴…...
Web连接器
分模块编写爬虫(一) 连接器模块基本思路: 输入:url连接输出:url对应的html文本步骤: 定义url和user-agent获取网页的requests对象捕获异常: 403:禁止访问404:页面失效5…...
插上数据的翅膀,开启我升职加薪的梦想之旅
我是麦思思,大学毕业后就进入大厂工作并担任电子消费行业业务部门的数据分析师,对于一个数据分析师而言,Excel是必备技能,函数公式我能随手就来,几十M的文件处理那都是轻轻松松。但是,近几年随着企业业务发…...
来香港饮茶吹水先,免费报名Zabbix Meetup香港站!
Zabbix Meetup 来到香港啦! 春暖花开,Zabbix计划5月来到香港,和你一起饮茶吹水! 时间:5月某日,周几方便? 预计14:00-17:00 形式:线下交流会,免费,线下&…...
做地坪网站/电商培训机构排名
官网链接 http://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html#about-this-document 要求 有NVDIA的显卡硬件(官网上有需要满足的条件) 下载 之前看网上的cuda安装好像都是需要安装驱动、SDK、Toolkit的,…...
.net网站方案/seo是什么服务器
在OAF页面的查找后台的数据源相对于在Form中显得更加麻烦,同时也无法像Form中那样能够较为准确的定位,但是也能够查找出大部分的内容。 本文介绍如何使用OAF提供的诊断功能来快速查找OAF页面对应的数据库对象: 关于本页功能(About this Page)…...
怎样做金融理财网站/网站宣传
本文同步自我的博客 Reeoos Blog,欢迎移步前往,^_^ 概览 本文基于React Router v1.03版本。React Router是一个为React设计的强大的路由库。可以帮助我们快速的实现路由功能,包括URL和React components之间的同步映射关系。在解释React Route…...
商务网站如何推广/百度收录刷排名
数据库的读写分离的好处? 1. 将读操作和写操作分离到不同的数据库上,避免主服务器出现性能瓶颈; 2. 主服务器进行写操作时,不影响查询应用服务器的查询性能,降低阻塞,提高并发; 3. 数据拥有多个…...
做网站业务员应该了解什么/seo教程 seo之家
选择题1、对于二进制码10000000,若其表示的真值为-128,则它是( )表示的A)原码 B)反码 C)补码 D)移码2、在( )表示中,二进制数11111111表示的十进制数-1A)原码 B)反码 C)补码 D)移码3、8位二进制补码的表数范围为( )A)-127-127 B)-128-128C)-1…...
网站设计的企业/青岛网站建设公司电话
某次工作需要,回顾了一下过去做的某个项目,突然发现自制的 javascrip Calendar(日历控件),一时遐想无限,勾起不少有关当年(当月?)那些雄心壮志的回忆。 从少不更事,到处变不惊,人少了很多冲劲,…...