输入一串字符串;开启三个线程;分别在输入的字符串后面打印  "_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);}}
}

多个线程同时运行,顺序打印问题相关推荐

  1. 三个线程轮流执行顺序打印ABC

    方法1:使用boolean标记 package com.ziyear.exam;/*** 3个线程,顺序打印ABC10次*/ public class PrintThread_ABC_10_1 {/* ...

  2. 阿里最喜欢问的多线程顺序打印的5种解法!

    Keeper导读 大家在换工作面试中,除了一些常规算法题,还会遇到各种需要手写的题目,所以打算总结出来,给大家个参考. 全文 2929 字,剩下的是代码,P6 及以下阅读只需要 8 分钟,高 P 请直 ...

  3. 多线程顺序打印的5种解法

    多线程同步的方式有许多,有传统的synchronized锁,还可以使用lock锁,下面列举多线程顺序打印的5种解法,算作对线程同步的一个总结. 文章目录 经典面试题 多种解法 使用 Lock 使用 w ...

  4. 常见的面试算法题:创建几个线程按顺序打印数字或者字母(多线程编程)(套用该模板即可)

    常见的面试算法题:创建几个线程按顺序打印数字或者字母(多线程编程)(套用该模板即可) 比较典型的题目,如下有: 题目一: 1.启动3个线程打印递增的数字, 线程1先打印1,2,3,4,5, 然后是线程 ...

  5. 如何改变 Python 中线程的执行顺序

    一.主线程会等待所有的子线程结束后才结束 首先我看下最普通情况下,主线程和子线程的情况. import threading from time import sleep, ctimedef sing( ...

  6. unity脚本运行顺序具体的解释

    unity脚本自带函数执行顺序例如以下:将以下脚本挂在随意物体执行就可以得到 Awake ->OnEable-> Start ->-> FixedUpdate-> Upd ...

  7. java两个线程同时运行_Java实现的两个线程同时运行案例

    本文实例讲述了Java实现的两个线程同时运行.分享给大家供大家参考,具体如下: /** * 两个案例同时运行案例 * 1:这个两个线程并不是有规律的运行而是有没有规律的交替运行 */ package ...

  8. 【完整代码】使用Semaphore实现线程的交替执行打印 A1B2C3D4E5

    import java.util.concurrent.Semaphore;/**使用Semaphore实现线程的交替执行打印 A1B2...Semaphore 基于AQS(内部维护了一个队列)可以用 ...

  9. java多线程同时运行_Java实现的两个线程同时运行案例

    本文实例讲述了Java实现的两个线程同时运行.分享给大家供大家参考,具体如下: /** * 两个案例同时运行案例 * 1:这个两个线程并不是有规律的运行而是有没有规律的交替运行 */ package ...

  10. C语言试题八十一之利用递归函数调用方式,将所输入的5个字符,相反顺序打印

    1.题目 利用递归函数调用方式,将所输入的5个字符,相反顺序打印 2 .温馨提示 C语言试题汇总里可用于计算机二级C语言笔试.机试.研究生复试中C程序设计科目.帮助C语言学者打好程序基础.C语言基础, ...

最新文章

  1. 亲手建造自己想要的生活
  2. vector,数组,动态数组效率测试
  3. (灌水)如何限制一个WinForm应用程序只能在一个进程运行
  4. Present ViewController详解
  5. 我为NET狂-----大前端专帖
  6. 前端学习(1320):同步和异步得区别
  7. idea 中maven依赖报错3部曲
  8. PHP分页类的实现,返回结果未渲染,更容易在HTML中使用
  9. 第一次个人项目【词频统计】——PSP表格
  10. mint-UI上拉加载下拉刷新和fastclick冲突问题解决
  11. MySQL(17)-----数值函数
  12. 学生信息管理系统(纯前端页面)———无后端数据库
  13. 我的世界服务器修改世界难度,我的世界服务器空岛生存调难度指令 | 手游网游页游攻略大全...
  14. 墨卡托坐标系和gcj03坐标系转换
  15. PyQt: 拖放事件(Drag Drop)
  16. AP与CP介绍【转】
  17. Python-OpenCV——Image Blurring(Image Smoothing)
  18. 程序员收入高,听说要被整治了?
  19. 英语基础-动词的分类
  20. Android 打包apk出错问题

热门文章

  1. Android--面试题整理(二)
  2. poj 1113 Wall 凸包的应用
  3. 【转】Tomcat7启动的总过程 (有时间自己写下tomcat8的)
  4. Oracle数据库的一些常用命令
  5. matlab多维数组
  6. 网络编程五种IO模型之poll模型
  7. python思维导图完整版下载高清_快速学习 Python 的全套 14 张思维导图(附高清版下载)...
  8. python并行编程语言_Python3 系列之 并行编程
  9. Stack Overflow上最热门问题是什么?
  10. initialProps被React-Navigation的navigation属性覆盖解决方案