学过了操作系统,突然不知道多线程有什么用了。
看了一下百度,发现多线程,可以提升系统利用率
在系统进行IO操作的时候,CPU可以处理一些其他的东西,等IO读取到内存后,CPU再处理之前的操作。
总之可以在用户层面,可以提升效率,不过,有时候多线程设计不当,调试也很麻烦
今天尝试一下简单的查找文件后缀以txt 里的内容 demo
SeachFileContent类,用来查询文件内容
package thread; import java.io.File; import java.io.IOException; public class SeachFileContent { public static void main(String[] args) { File file = new File("D://TT//Draymonder"); if(!file.exists()) { try { file.createNewFile(); } catch (IOException e) { e.printStackTrace(); } }else { String content="复制"; searchFileContent(file,content); } } public static void searchFileContent(File file, String content) { if(file.isFile()) { if(file.getName().toLowerCase().endsWith(".txt")) { new SearchFileThread(file, content).start(); } } if(file.isDirectory()) { File[] files = file.listFiles(); for(File singlefile : files) { searchFileContent(singlefile, content); } } } }
SearchFileThread类,用来多线程处理文件内容的查询
package thread; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class SearchFileThread extends Thread { private File file; private String content; SearchFileThread() {} SearchFileThread(File file, String content) { this.file = file; this.content = content; } private String getFileContent(File file) { try(FileReader fileReader = new FileReader(file)) { char []all = new char[(int)file.length()]; fileReader.read(all); return new String(all); }catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } } @Override public void run() { String str = getFileContent(this.file); if(null != str) { if(str.contains(this.content)) { System.out.printf("在%s中含有 目标串\"%s\" ...%n",this.file.getName(),this.content); } } } }
原文地址:https://www.cnblogs.com/Draymonder/p/9565110.html
时间: 2024-10-10 09:39:31