我实现了一个下载管理器,它工作得很好,除了我注意到一件事,有时线程在写入文件时会阻塞一段时间(50 毫秒到最多 10 秒),我在 Android(基于 Linux)上运行这个程序,我的猜测是操作系统级别是否有某种缓冲区需要刷新,而我的写入实际上写入了该缓冲区,如果该缓冲区已满,则写入需要等待。
我的问题是可能导致阻塞的可能原因是什么?
众所周知,IO 是一种“阻塞”活动,因此您的问题应该是“当您的程序忙于等待 IO 完成时您应该做什么”
采用一些众所周知的并发策略和基于事件的编程模式是一个好的开始
-我已经通过以下方式完成了文件的写入和读取,并且从未遇到任何问题。
例如:
File f = new File("Path");
FileWriter fw = new FileWriter(f);
BufferedWriter bw = new BufferedWriter(fw);
-您也可以试用NIO
Java 中的包。