当前位置:网站首页>【多线程】Thread类的基本用法
【多线程】Thread类的基本用法
2022-08-02 23:20:00 【SPMAX】
在Java中接触线程,避免不了去使用一个类Thread类,该类是创建线程的关键,它是创建线程的前提,下面介绍一些有关Thread类的基本用法。
一:线程的创建:
第一种,通过重新写一个Mythread类,通过向上转型的方式继承Thread类,并重写run方法:
第二种,通过重新写一个Myrunnable类,然后继承Runnable接口,重写run方法,然后在main线程里面创建Thread类,然后实例化Myrunnable对象,作为参数传入新创建的Thread类:
第三种,通过Thread实例化时候创建匿名内部类的方式来新建线程,并且重写run方法
第四种,通过匿名内部类的方式实例化Runnable并重写run方法,将其作为参数传入给Thread线程。
第五种,实例化Thread类的时候传入参数new Runnable类并重写run方法:
第六种,通过lambda表达式来创建Thread线程:
注意此时不需要重写run方法,而是直接在里面写需要执行的任务。
注意区分Thread.run和Thread.start 区别:
二者都是Thread类里面的方法,但是run方法作用只是执行任务,可以通过实例化Thread类然后调用该方法执行任务,但是start方法作用是开启一个新的线程,这里的新线程是与main线程同级作为前台线程,二者都执行完了该程序进程才算执行完成。
因此run与start区别可以概括为:start开启了新的线程,进而执行新线程里面的任务
而run只是一个类里面的普通的方法,可以通过平常调用类中方法的方式来调用该方法,并没有启动新的线程。
二、线程的休眠:
线程的休眠,即通过调用Thread.sleep()方法来进行,括号里面的放入数字,单位为ms(毫秒)即1000ms=1秒。通过sleep进行休眠后,线程发生阻塞,即线程中的PCB(这里PCB可以和线程作为相等的来理解)从就绪队列(随时可以被操作系统的调度器调用)放入至阻塞队列(不能被操作系统的调度器进行调用),这两个队列为双向链表。在sleep执行完之后,PCB就从阻塞队列加入进就绪队列,但是由于操作系统的调度器调用是随机调用(根据操作系统对资源的开销进行随即调用),所以即使将从阻塞队列放回就绪队列,依然不一定立刻就执行该线程,因为随机调用的机制,不一定立刻从就绪队列找到该线程进行执行,但是会依然会执行,只不过晚一点点,误差不超过10ms。
三、线程的中断
线程的中断是通过线程的标记来执行:通过两个方法:
1:Thread.currentThread().isInterrupted 获取线程的标记
2:Thread.interrupted获取线程标记
这两个都是放在run方法里面来获取线程的标记,
线程在执行状态则二者都返回true,若在阻塞状态则返回false,便于在该线程以外的线程例如main线程对新线程进行控制,控制规则为:
1>当新线程为执行状态,在新线程外调用Thread.interrupt()方法,将新线程标记从true改为false,
2>当新线程为阻塞状态,在新线程外调用Thread.interrupt()方法,则新线程所执行的方法会抛出异常,例如新线程正在调用sleep()方法进行阻塞,此时在新线程外调用interrupt()方法,此时sleep()方法会抛出异常,便于利用try-catch进行捕获进行下一步对新线程的操作。
边栏推荐
- 科研用Cholesterol-PEG-NHS,NHS-PEG-CLS,胆固醇-聚乙二醇-活性酯
- 厌倦了安装数据库?改用 Docker
- js基础知识整理之 —— Math
- IDEA多线程调试
- DownMusic summary record
- No-code development platform form styling steps introductory course
- Speech Synthesis Model Cheat Sheet (1)
- 【UE5 骨骼动画】全形体IK导致Two Bone IK只能斜着移动,不能平移
- Directing a non-relational database introduction and deployment
- B站回应HR称用户是Loser:涉事面试官去年底已被劝退
猜你喜欢
随机推荐
5、Citrix云桌面初始化Storefront设置
为了面试阿里,熬夜肝完这份软件测试笔记后,Offer终于到手了
Rebound shell principle and implementation
基于奇异谱分析法和长短时记忆网络组合模型的滑坡位移预测
智能电视竞争白热化,利用小程序共建生态突围
我们来浅谈代码语言的魅力
RollBack Rx Professional RMC 安装教程
vant-swipe自适应图片高度+图片预览
nmap: Bad CPU type in executable
js基础知识整理之 —— Math
js基础知识整理之 —— 变量和数据类型
21天学习挑战赛(1)设备树的由来
What is the matter that programmers often say "the left hand is knuckled and the right hand is hot"?
js基础知识整理之 —— Date和定时器
反弹shell原理与实现
程序员英语自我介绍
00 -- jieba分词
服务间歇性停顿问题优化|得物技术
C语言函数详解(2)【函数参数——实际参数(实参)&形式参数(形参)】
Speech Synthesis Model Cheat Sheet (1)