面试经典题:创建三个线程,按顺序依次循环打印hello+i ...

打印 上一主题 下一主题

主题 512|帖子 512|积分 1538

二面被问到的手撕题,自己总计一下。考察的还是比较基础的,但也是对自己知识领悟程度的考察。
写一个程序,要求创建三个线程依次打印hello+线程号。
考察多线程和同步的知识点应用
这里设置为打印10轮。
  1. package 多线程;
  2. /**
  3. * @Author wuyifan
  4. * @Date 2024/6/4 20:11
  5. * @Version 1.0
  6. */
  7. class PrintSequence implements Runnable {
  8.     private int threadId;
  9.     private static final Object lock = new Object();
  10.     private static int currentThreadId = 0;
  11.     private int printCount = 10;
  12.     public PrintSequence(int threadId) {
  13.         this.threadId = threadId;
  14.     }
  15.     @Override
  16.     public void run() {
  17.         for (int i = 0; i < printCount; ) {
  18.             synchronized (lock) {
  19.                 if (currentThreadId % 3 == threadId) {
  20.                     System.out.println("Thread " + threadId + ": hello" + (i + 1));
  21.                     i++;
  22.                     currentThreadId++;
  23.                     lock.notifyAll(); // 唤醒所有等待的线程
  24.                 } else {
  25.                     try {
  26.                         lock.wait(); // 等待其他线程的唤醒
  27.                     } catch (InterruptedException e) {
  28.                         e.printStackTrace();
  29.                     }
  30.                 }
  31.             }
  32.         }
  33.     }
  34. }
  35. public class New3Thread {
  36.     public static void main(String[] args) {
  37.         Thread t1 = new Thread(new PrintSequence(0), "T1");
  38.         Thread t2 = new Thread(new PrintSequence(1), "T2");
  39.         Thread t3 = new Thread(new PrintSequence(2), "T3");
  40.         t1.start();
  41.         t2.start();
  42.         t3.start();
  43.     }
  44. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

拉不拉稀肚拉稀

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表