版权声明:本博客为记录本人学习过程而开,内容大多从网上学习与整理所得,若侵权请告知! https://blog.csdn.net/Fly_as_tadpole/article/details/88836987
输入一串字符串;开启三个线程;分别在输入的字符串后面打印 "_A" "_B" "_C" 输出结果。
输入:hello
输出:hello_A_B_C
思路:使用Callable 可以返回对应的打印,再在原字符串的基础上拼接。
1)使用join
2)使用线程池里的SingleThreadPool
第一种方法:
import java.util.Scanner;
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
public class Main1 {
public static void main(String[] args) throws Exception {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextLine()) {
String string = scanner.nextLine();
FutureTask<String> futureTask1 = new FutureTask<>((Callable<String>) () -> {
try {
} catch (Exception e) {
e.printStackTrace();
} finally {
return "_A";
}
});
FutureTask<String> futureTask2 = new FutureTask<String>((Callable<String>) () -> {
try {
} catch (Exception e) {
e.printStackTrace();
} finally {
return "_B";
}
});
FutureTask<String> futureTask3 = new FutureTask<String>((Callable<String>) () -> {
try {
} catch (Exception e) {
e.printStackTrace();
} finally {
return "_C";
}
});
Thread t1 = new Thread(futureTask1);
Thread t2 = new Thread(futureTask2);
Thread t3 = new Thread(futureTask3);
t1.start();
t2.start();
t3.start();
t1.join();
t2.join();
t3.join();
string += futureTask1.get();
string += futureTask2.get();
string += futureTask3.get();
System.out.println(string);
}
}
}
第二种方法:
import java.util.Scanner;
import java.util.concurrent.*;
class main{
public static void main(String[] args) throws Exception {
Scanner scanner = new Scanner(System.in);
while(scanner.hasNextLine()){
String string = scanner.nextLine();
//CountDownLatch countDownLatch = new CountDownLatch(3);
FutureTask<String> task1 = new FutureTask<>((Callable<String>)()->{
try{
}catch (Exception e){
e.printStackTrace();
}finally {
//countDownLatch.countDown();
return "_A";
}
});
FutureTask<String> task2 = new FutureTask<>((Callable<String>)()->{
try{
}catch (Exception e){
e.printStackTrace();
}finally {
//countDownLatch.countDown();
return "_B";
}
});
FutureTask<String> task3 = new FutureTask<>((Callable<String>)()->{
try{
}catch (Exception e){
e.printStackTrace();
}finally {
//countDownLatch.countDown();
return "_C";
}
});
ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.submit(task1);
executorService.submit(task2);
executorService.submit(task3);
string += task1.get();
string += task2.get();
string += task3.get();
//countDownLatch.await();
System.out.println(string);
}
}
}