【快手初面】要求3个线程按顺序循环执行,如循环打印A,B,C 您所在的位置:网站首页 线程顺序执行的方法 【快手初面】要求3个线程按顺序循环执行,如循环打印A,B,C

【快手初面】要求3个线程按顺序循环执行,如循环打印A,B,C

#【快手初面】要求3个线程按顺序循环执行,如循环打印A,B,C| 来源: 网络整理| 查看: 265

【背景】这个题目是当时远程面试时,手写的题目。自己比较惭愧,当时写的并不好,面试完就又好好的完善了下。

 

一、题意分析

3个线程要按顺序执行,就要通过线程通信去控制这3个线程的执行顺序。

而线程通信的方式就有wait/notify, condition#await, condition#signal等

二、具体代码

 

1 public class Main { 2 3 private static String lastCompleteStr = "C"; 4 5 public static void main(String[] args) { 6 new Thread(new PrintTask("A", "C")).start(); 7 new Thread(new PrintTask("B", "A")).start(); 8 new Thread(new PrintTask("C", "B")).start(); 9 } 10 11 static class PrintTask implements Runnable { 12 13 private String cur; 14 15 private String waitLastStr; 16 17 public PrintTask(String cur, String waitLastStr) { 18 this.cur = cur; 19 this.waitLastStr = waitLastStr; 20 } 21 22 @Override 23 public void run() { 24 try { 25 while (true) { 26 synchronized (Main.class) { 27 while (!lastCompleteStr.equals(waitLastStr)) { 28 Main.class.wait(); 29 } 30 31 System.out.println(cur); 32 33 lastCompleteStr = cur; 34 35 Main.class.notifyAll(); 36 } 37 } 38 } catch (Exception e ) { 39 e.printStackTrace(); 40 } 41 } 42 } 43 }

 

 

本帖子中包含资源

您需要 登录 才可以下载,没有帐号?立即注册



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有