文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

java多线程题目的解决方案

2023-06-17 10:45

关注

本篇文章为大家展示了java多线程题目的解决方案,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

在iteye上看到的一道多线程的题目,参考了一下网友的实现,那Eclipse调试通过,算是对JAVA5的并发库有个大致的了解,分享出来,欢迎园里的同学拍砖。

题目:

要求用三个线程,按顺序打印1,2,3,4,5.... 71,72,73,74, 75.

线程1先打印1,2,3,4,5, 然后是线程2打印6,7,8,9,10, 然后是线程3打印11,12,13,14,15. 接着再由线程1打印16,17,18,19,20....以此类推, 直到线程3打印到75。

分析:感觉出题人是要考察一下你是否能够很好的控制多线程,让他们有序的进行。

线程池:3个线程,需要使用并发库的线程池

锁(lcok):在打印的时候,只允许一个线程进入,其他的线程等待

下面的主要的代码:

import java.util.HashMap;  import java.util.Map;  import java.util.concurrent.CountDownLatch;  import java.util.concurrent.ExecutorService;  import java.util.concurrent.Executors;  import java.util.concurrent.locks.Condition;  import java.util.concurrent.locks.Lock;  import java.util.concurrent.locks.ReentrantLock;   public class NumberPrinter {       private Lock lock = new ReentrantLock();       private Condition c1 = lock.newCondition();      private Condition c2 = lock.newCondition();      private Condition c3 = lock.newCondition();       private Map<Integer, Condition> condtionContext =           new HashMap<Integer, Condition>();       public NumberPrinter() {          condtionContext.put(Integer.valueOf(0), c1);          condtionContext.put(Integer.valueOf(1), c2);          condtionContext.put(Integer.valueOf(2), c3);      }            private int count = 0;               public void print(int id) {          lock.lock();          try {              while(count*5 < 75) {                  int curID = calcID();                  if (id == curID) {                      for (int i = 1; i<=5; i++) {                          System.out.print(count*5 +i+ ",");                      }                      System.out.println();                      count++;                      int nextID = calcID();                      Condition nextCondition = condtionContext.get(                              Integer.valueOf(nextID));                      //通知下一线程                      nextCondition.signal();                  } else {                      Condition condition = condtionContext.get(                              Integer.valueOf(id));                      condition.await();                  }              }              //通知线程结束              for(Condition c : condtionContext.values()) {                  c.signal();              }          } catch (Exception e) {              e.printStackTrace();          } finally {              lock.unlock();          }      }            private int calcID() {          // TODO Auto-generated method stub          return count % 3;      }             public static void main(String[] args) {          ExecutorService executor = Executors.newFixedThreadPool(3);          final CountDownLatch latch = new CountDownLatch(1);             final NumberPrinter printer = new NumberPrinter();           for (int i = 0; i < 3; i++) {                 final int id = i;              executor.submit(new Runnable() {                  @Override                 public void run() {                      // TODO Auto-generated method stub                      try {                          latch.await();                      } catch (InterruptedException e) {                          // TODO Auto-generated catch block                          e.printStackTrace();                      }                      printer.print(id);                  }              });          }          System.out.println("三个任务开始顺序打印数字。。。。。。");           latch.countDown();          executor.shutdown();      }  }

上述内容就是java多线程题目的解决方案,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯