Java 测试代码,TestMultThreadWriteFile.java:
import java.io.FileWriter; import java.io.IOException; /** * 测试多线程同时往一个文件中追加写入文本测试 */ public class TestMultThreadWriteFile { private static void write() { String threadName = Thread.currentThread().getName(); FileWriter fw = null; try { fw = new FileWriter("test.txt", true); int i = 1; while(i++ < 1000){ String msg = String.format("[%s]-%s-当前时间:%s\r\n", i, threadName, System.currentTimeMillis()); fw.write(msg); } fw.write(String.format("[%s] 执行完成\r\n", threadName)); } catch (Exception e) { e.printStackTrace(); }finally { if(null != fw){ try { fw.close(); } catch (IOException e) { e.printStackTrace(); } } } System.out.println(threadName +"执行完成"); } public static void main(String[] args) throws InterruptedException { for(int i=1;i<10;i++){ Thread t = new Thread(TestMultThreadWriteFile::write); t.setName("线程" + i); t.start(); } Thread.sleep( 1 * 60 * 1000); } }
测试结果:
不会抛出异常;
写入文件内容不存在丢失的情况;
文件内容会被打乱,本来是一行的文本内容可能存在文件写一半就被其他线程内容插了进来
test.txt 部分内容如下:
[560]-线程1-当前时间:1545292681106
[561]-线程1-当前时间:1545292681106
[562]-线程1-当前时间:1545292681106当前时间:1545292681093
[936]-线程7-当前时间:1545292681094
[937]-线程7-当前时间:1545292681094
[938]-线程7-当前时间:1545292681094
[939]-线程7-当前时间:1545292681094
[940]-线程7-当前时间:1545292681094
...
[747]-线程9-当前时间:1545292681125
[748]-线程9-当前时间:1545292681125
[749]-
[563]-线程1-当前时间:1545292681106
[564]-线程1-当前时间:1545292681106
[565]-线程1-当前时间:1545292681106