package IO;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.concurrent.*;
public class Io implements Callable {
private StringBuffer text = new StringBuffer();
private long start;
public Io(long start){
this.start = start;
}
public FileReader reader;
{
try {
reader = new FileReader("D:\\seldom\\Red.Alert.2.Yuris.Revenge.LAN.Green." +
"Edition-ALI213\\Red.Alert.2.Yuris.Revenge.CHS.Green.Edition-ALI213\\creditsmd.txt");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
@Override
public String call() {
char[] store = new char[10];
try {
long real = reader.skip(this.start);
for (int i = 0; i < 50; i++){
if (reader.read(store) > 0) {
text.append(store);
store = new char[10];
}
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(this.start/500 + "线程执行完毕");
return new String(this.text);
}
public StringBuffer getText(){
return text;
}
public static void main(String[] args) throws InterruptedException, ExecutionException {
ExecutorService pool = Executors.newSingleThreadExecutor();
for (int i = 0; i < 10; i++){
Future <String> future = pool.submit(new Io(i*500));
System.out.print(future.get());
}
pool.shutdown();
}
}
之前忘提了,其实也可以通过实现callable接口来实现有返回值的多线程,不过需要借助一下线程池,线程池用完别忘记关哦。
关于线程池的类,方法很多,以后还会尝试。
虽然多线程读取文件没什么卵用,不过多线程下载就不一样了,这个也想试一试。
Ps:输出格式不太好,见谅啦。