多个线程同时运行,顺序打印问题
生活随笔
收集整理的這篇文章主要介紹了
多个线程同时运行,顺序打印问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
輸入一串字符串;開啟三個線程;分別在輸入的字符串后面打印? "_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);}} }總結
以上是生活随笔為你收集整理的多个线程同时运行,顺序打印问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动态规划:连续子数组的最大和
- 下一篇: 海量数据处理:BitMap