详解java线程的开始、暂停、继续
发布时间 - 2026-01-10 22:16:21 点击率:次Android项目中的一个需求:通过线程读取文件内容,并且可以控制线程的开始、暂停、继续,来控制读文件。在此记录下。

直接在主线程中,通过wait、notify、notifyAll去控制读文件的线程(子线程),报错:java.lang.IllegalMonitorStateException。
需要注意的几个问题:
- 任何一个时刻,对象的控制权(monitor)只能被一个线程拥有。
- 无论是执行对象的wait、notify还是notifyAll方法,必须保证当前运行的线程取得了该对象的控制权(monitor)。
- 如果在没有控制权的线程里执行对象的以上三种方法,就会报错java.lang.IllegalMonitorStateException。
- JVM基于多线程,默认情况下不能保证运行时线程的时序性。
线程取得控制权的3种方法:
- 执行对象的某个同步实例方法。
- 执行对象对应类的同步静态方法。
- 执行对该对象加同步锁的同步块。
这里将开始、暂停、继续封装在线程类中,直接调用该实例的方法就行。
public class ReadThread implements Runnable{
public Thread t;
private String threadName;
boolean suspended=false;
public ReadThread(String threadName){
this.threadName=threadName;
System.out.println("Creating " + threadName );
}
public void run() {
for(int i = 10; i > 0; i--) {
System.out.println("Thread: " + threadName + ", " + i);
// Let the thread sleep for a while.
try {
Thread.sleep(300);
synchronized(this) {
while(suspended) {
wait();
}
}
} catch (InterruptedException e) {
System.out.println("Thread " + threadName + " interrupted.");
e.printStackTrace();
}
System.out.println("Thread " + threadName + " exiting.");
}
}
/**
* 开始
*/
public void start(){
System.out.println("Starting " + threadName );
if(t==null){
t=new Thread(this, threadName);
t.start();
}
}
/**
* 暂停
*/
void suspend(){
suspended = true;
}
/**
* 继续
*/
synchronized void resume(){
suspended = false;
notify();
}
}
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# java
# 线程
# 开始
# 暂停
# 继续
# Java 线程池框架
# java 线程详解及线程与进程的区别
# Java中终止线程的三种方法
# Java多线程--让主线程等待所有子线程执行完毕在执行
# java多线程实现服务器端与多客户端之间的通信
# java 多线程-锁详解及示例代码
# Java多线程之异步Future机制的原理和实现
# 深入理解JAVA多线程之线程间的通信方式
# Java线程间的通信方式详解
# Java线程的基本概念
# 报错
# 就会
# 在此
# 就行
# 三种
# 任何一个
# 种方法
# 需要注意
# 装在
# 多线程
# 类中
# 取得了
# 情况下
# 直接调用
# ReadThread
# public
# class
# brush
# pre
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试
海南网站制作公司有哪些,海口网是哪家的?
Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置
为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】
使用Dockerfile构建java web环境
青岛网站建设如何选择本地服务器?
Firefox Developer Edition开发者版本入口
香港服务器租用费用高吗?如何避免常见误区?
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
如何用美橙互联一键搭建多站合一网站?
bing浏览器学术搜索入口_bing学术文献检索地址
canvas 画布在主流浏览器中的尺寸限制详细介绍
如何用PHP工具快速搭建高效网站?
Win11怎么设置默认图片查看器_Windows11照片应用关联设置
js代码实现下拉菜单【推荐】
潮流网站制作头像软件下载,适合母子的网名有哪些?
如何快速建站并高效导出源代码?
Python文件流缓冲机制_IO性能解析【教程】
Internet Explorer官网直接进入 IE浏览器在线体验版网址
音乐网站服务器如何优化API响应速度?
小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像
北京网站制作的公司有哪些,北京白云观官方网站?
,网页ppt怎么弄成自己的ppt?
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
奇安信“盘古石”团队突破 iOS 26.1 提权
Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
python中快速进行多个字符替换的方法小结
Laravel如何创建自定义Facades?(详细步骤)
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践
在线教育网站制作平台,山西立德教育官网?
Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】
如何在搬瓦工VPS快速搭建网站?
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
利用vue写todolist单页应用
Laravel如何生成URL和重定向?(路由助手函数)
大连网站制作公司哪家好一点,大连买房网站哪个好?
如何在阿里云虚拟主机上快速搭建个人网站?
网页设计与网站制作内容,怎样注册网站?
Laravel如何发送系统通知?(Notification渠道示例)
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
如何基于云服务器快速搭建网站及云盘系统?
Laravel怎么生成URL_Laravel路由命名与URL生成函数详解
Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明
php485函数参数是什么意思_php485各参数详细说明【介绍】
Laravel中的Facade(门面)到底是什么原理
悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】
Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出

