java - 使用 MutliThreading 在文本文件中读取和写入
问题描述
我创建了以下应用程序来测试ExecutorService
. 我有一个Reader
从文件中读取的线程。读取的字符串(最多 2 行)被反复传递给writer
负责将字符串打印到控制台的任务。我将此任务提交给线程执行任务的executor
pool
地方。worker
与仅使用一个线程/一个进程自己进行读取和写入相比,如何检查此方法是否确实更快?
public class ClientTest {
ExecutorService e= Executors.newFixedThreadPool(2);
static ClientTest c = new ClientTest();
public static void main(String args[])
{
Thread reader=new Thread() {
public void run() {
BufferedReader br=null;
int n=0;
try {
br = new BufferedReader(new FileReader("C:\\Users\\JOHHNY\\Desktop\\Sample.txt"));
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
sb.append(line);
sb.append("\n");
n++;
if(n%2==0) {
c.write(sb);
Thread.sleep(1000);
sb.setLength(0);
}
line = br.readLine();
}
}
catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
finally {
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
};
reader.start();
}
private void write(final StringBuilder sb) {
e.execute(new Runnable() {
public void run() {
System.out.println(Thread.currentThread().getName()+" "+sb.toString());
}
});
}
}
解决方案
推荐阅读
- c++14 - 为什么我在二叉树的对角遍历代码中出现 SIGBART 错误?
- winapi - ShowWindow 调用可防止通过 SetLayeredWindowAttribute 更改 alpha
- bash - 如何找出一个数字与文件中下一个相同数字的出现之间有多少行?
- angular - 如果条件失败,Angular 11
- reactjs - 反应原生 setInterval useState
- java - iText 性能:生成或填充 pdf 表单?
- reactjs - 默认不是函数反应类型错误
- java - 如何在 JTable 中显示愿望清单?
- rest - 单个 $filter 中的多个值
- mysql - 顶级玩家找到 SQL