前言
最近在开发Swing项目时,由于使用了多线程做一些对文本文件进行读写等 IO操作,运行时一到该线程运行时,自动中止或中断了,经过半天测试以及Debug发现问题所在
解决思路
- 检查线程中对IO的读写操作的流是否Close(不关会导致线程堵塞)
由于我对多线程知识并未完全掌握,也算是知识漏洞补缺了一下!
案例代码
Runnable.java
@Override
public void run() {
if(validCoreDownloadFlag() && serverInfo.getServerProperties() != null){
// MinecraftServerHelper.process.stopBatServer();
System.out.println("开始注入!");
// 注入
immitServerProperties();
if(ServerUtils.writeServerPropertiesFlag){
// 彻底返写后关闭线程
ThreadUtils.serverImmitScheduledFuture.cancel(true);
}
}
}
执行IO操作的涉及方法
/**
* 将ConfigMap数据写入回文件配置
*/
public void writeFileConfig(){
try {
StringBuilder sb = new StringBuilder();
FileOutputStream outputStream = new FileOutputStream(file);
for(String key : configMap.keySet()){
Object value = configMap.get(key);
String formatStr = String.format("%s=%s",key,value.toString());
outputStream.write(formatStr.getBytes(StandardCharsets.UTF_8));
outputStream.write("\r\n".getBytes(StandardCharsets.UTF_8));
}
outputStream.flush();
outputStream.close();
ServerUtils.writeServerPropertiesFlag = true;
}catch (Exception e){
e.printStackTrace();
}
}
结束语
Java踩坑笔记 —— 在线程中执行IO操作出现线程中断或堵塞的解决方案
- 如果对你有帮助的话可以给我点赞收藏,十分感谢
- 致力做优、好、细、精学习笔记分享给大家
- 可以转载 需标明 出处 本文链接。
- 笔者一个开源项目:我的世界开服助手 希望大家可以点一下star哦
感谢你的观看。