【发布时间】:2021-07-08 04:36:30
【问题描述】:
我想依次运行 2 个或更多线程,我的意思是例如:首先它应该运行第一个线程,然后运行第二个线程,然后......。 我用过 Executors.newSingleThreadExecutor();也。我有 3 个任务:1-创建一个文件 2- 在其中写一些东西 3- 读取文件 创建任务:
public class FirstTask implements Runnable{
private CreateRoleFile createFiel = new CreateRoleFile();
@Override
public void run() {
createFiel.createFile();
}
}
createFile() 方法:
public Path createFile(){
Path path = Paths.get("Files/first.txt");
if (!Files.exists(path)) {
try {
Files.createFile(path);
} catch (IOException e) {
System.out.println("something went wrong while creating first.txt .Please try again!");
}
System.out.println("thread name = "+Thread.currentThread().getName());
return path;
} else {
System.out.println("This file is already exist!!");
System.out.println("thread name = "+Thread.currentThread().getName());
return path;
}
}
SecondTask 类是:
public class SecondTask implements Runnable {
WriteRoleFile writeFile = new WriteRoleFile();
@Override
public void run() {
writeFile.Writefile("1020");
}
} 这是我的主要方法:
public static void main(String[] args) throws ExecutionException, InterruptedException {
ExecutorService executorService1 = Executors.newSingleThreadExecutor();
Runnable firstTask =new FirstTask();
executorService1.execute(firstTask);
executorService1.shutdown();
ExecutorService executorService2=Executors.newSingleThreadExecutor();
Runnable secondTask = new SecondTask();
executorService2.submit(secondTask);
executorService2.shutdown();
ExecutorService executorService3 =Executors.newSingleThreadExecutor();
Callable thirdTask=new ThirdTask();
executorService3.submit(thirdTask);
executorService3.shutdown();
}
ThirdTask 类是:
public class ThirdTask implements Callable<String> {
ReadRoleFile readeer = new ReadRoleFile();
@Override
public String call() {
String s = readeer.readFile();
return s;
}
}
readFile() 方法是:
public String readFile() {
Path path = Paths.get("Files/first.txt");
String s = "";
try {
if (Files.size(path) == 0) {
System.out.println("nothing has been wrote yet .");
} else {
try {
BufferedReader bufferedReader = Files.newBufferedReader(path);
s = bufferedReader.readLine();
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("thread name = " + Thread.currentThread().getName());
System.out.println(s);
return s;
}
输出是: 这个文件已经存在!! 线程名称 = pool-1-thread-1 线程名称 = pool-3-thread-1 空值 线程名称 = pool-2-thread-1
**我需要先运行 pool-1-thread-1 和 pool-2-thread-1 因为它必须先在文件中写入一个数字,然后 pool-3-thread1 才能从文件中读取 * *
【问题讨论】:
-
很高兴看到您参与 Stack Overflow。请用适当的大小写、标点符号等来写你的散文。这个网站更像维基百科,而不是一个休闲聊天室。
标签: java multithreading threadpool