运行 文件方法上的线程
Running Threads on a File Method
您好,我正在尝试 运行 我的 "threadedSort" 上的线程,但我不能使用传统的无效 运行 方法,因为它 returns 无效。我也尝试过使用同步方法,但我认为它没有任何区别...与可重入方法相同,我不知道我做错了什么。
private static String[] getDatathread(File file) throws IOException {
ArrayList<String> data = new ArrayList<String>();
BufferedReader in = new BufferedReader(new FileReader(file));
// Read the data from the file until the end of file is reached
while (true) {
String line = in.readLine();
if (line == null) {
// the end of file was reached
break;
} else {
//synchronized(line){
lock.lock();
try{
data.add(line);
}finally{
lock.unlock();
}
//}
}
}
//Close the input stream and return the data
in.close();
return data.toArray(new String[0]);
}
}
public static String[] threadedSort(File[] files) throws IOException, InterruptedException {
String[] sortedData = new String[0];
for (File file : files) {
String[] data = getDatathread(file);
Thread.sleep(100);
data = MergeSort.mergeSort(data);
sortedData = MergeSort.merge(sortedData, data);
}
return sortedData;
}
我不确定您为什么在代码中为此使用同步块或可重入锁。看来你已经在块上使用了锁,块中没有以任何方式共享资源。
如果您想 运行 并行处理 threadedSort 并获取结果数据对象,您可以简单地将要返回的数据指定为 class 变量并稍后获取对象。
您好,我正在尝试 运行 我的 "threadedSort" 上的线程,但我不能使用传统的无效 运行 方法,因为它 returns 无效。我也尝试过使用同步方法,但我认为它没有任何区别...与可重入方法相同,我不知道我做错了什么。
private static String[] getDatathread(File file) throws IOException {
ArrayList<String> data = new ArrayList<String>();
BufferedReader in = new BufferedReader(new FileReader(file));
// Read the data from the file until the end of file is reached
while (true) {
String line = in.readLine();
if (line == null) {
// the end of file was reached
break;
} else {
//synchronized(line){
lock.lock();
try{
data.add(line);
}finally{
lock.unlock();
}
//}
}
}
//Close the input stream and return the data
in.close();
return data.toArray(new String[0]);
}
}
public static String[] threadedSort(File[] files) throws IOException, InterruptedException {
String[] sortedData = new String[0];
for (File file : files) {
String[] data = getDatathread(file);
Thread.sleep(100);
data = MergeSort.mergeSort(data);
sortedData = MergeSort.merge(sortedData, data);
}
return sortedData;
}
我不确定您为什么在代码中为此使用同步块或可重入锁。看来你已经在块上使用了锁,块中没有以任何方式共享资源。
如果您想 运行 并行处理 threadedSort 并获取结果数据对象,您可以简单地将要返回的数据指定为 class 变量并稍后获取对象。