返回顶部
首页 > 资讯 > 精选 >java多线程题目的解决方案
  • 648
分享到

java多线程题目的解决方案

2023-06-17 10:06:57 648人浏览 薄情痞子
摘要

本篇文章为大家展示了java多线程题目的解决方案,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。在iteye上看到的一道多线程的题目,参考了一下网友的实现,那Eclipse调试通过,算是对JAVA5的

本篇文章为大家展示了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多线程题目的解决方案,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网精选频道。

--结束END--

本文标题: java多线程题目的解决方案

本文链接: https://lsjlt.com/news/288333.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • java多线程题目的解决方案
    本篇文章为大家展示了java多线程题目的解决方案,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。在iteye上看到的一道多线程的题目,参考了一下网友的实现,那Eclipse调试通过,算是对JAVA5的...
    99+
    2023-06-17
  • Java线程安全问题的解决方案
    目录线程安全问题演示解决线程安全问题1.原子类AtomicInteger2.加锁排队执行2.1 同步锁synchronized2.2 可重入锁ReentrantLock3.线程本地变...
    99+
    2024-04-02
  • java多线程面试题目
    什么是线程?线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。 (推荐学习:java面试题目)比如,如果一个线程完成一个...
    99+
    2020-08-31
    java面试题 java
  • 多线程编程中遇到的Python问题及解决方案
    多线程编程中遇到的Python问题及解决方案在进行多线程编程时,我们常常会遇到一些与线程同步、资源竞争和死锁等相关的问题。本文将介绍一些常见的Python多线程编程问题,并提供相应的解决方案和代码示例。线程同步问题多个线程可能同时访问共享资...
    99+
    2023-10-22
    同步问题:多线程编程中
  • PHP多线程难题:探索原因与解决方案
    PHP作为一种流行的服务器端脚本语言,广泛应用于Web开发领域。然而,PHP本身在处理多线程任务时存在一些难题,这些难题可能导致程序性能下降甚至出现意外情况。本文将探讨PHP多线程问题...
    99+
    2024-04-02
  • Keras多线程机制与flask多线程冲突的解决方案
    在使用flask部署Keras,tensorflow等框架时候,经常出现 FailedPreconditionError: Attempting to use uninitiali...
    99+
    2024-04-02
  • java多线程和并发面试题目(第4题,附答案)
    4、ConcurrentLinkedQueue非阻塞无界链表队列ConcurrentLinkedQueue是一个线程安全的队列,基于链表结构实现,是一个无界队列,理论上来说队列的长度可以无限扩大。与其他队列相同,ConcurrentLink...
    99+
    2019-02-16
    java面试题 java
  • java多线程和并发面试题目(1~3题,附答案)
    1、DeplayQueue延时无界阻塞队列在谈到DelayQueue的使用和原理的时候,我们首先介绍一下DelayQueue,DelayQueue是一个无界阻塞队列,只有在延迟期满时才能从中提取元素。该队列的头部是延迟期满后保存时间最长的D...
    99+
    2020-08-06
    java面试题 java
  • Java 线程池的陷阱与解决方案
    1. 线程泄漏 线程泄漏是指创建的线程未正确销毁,导致内存泄漏。这是线程池中最常见的陷阱之一。 解决方案: 使用 ExecutorService 接口的 shutdown() 和 shutdownNow() 方法来显式关闭线程池。 使用...
    99+
    2024-03-13
    线程池
  • Java多线程之线程安全问题怎么解决
    本篇内容主要讲解“Java多线程之线程安全问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java多线程之线程安全问题怎么解决”吧!1.线程安全概述1.1什么是线程安全问题首先我们需要...
    99+
    2023-06-30
  • 总结java多线程之互斥与同步解决方案
    目录一、线程互斥与同步二、synchronized三、轻量锁与偏向锁一、线程互斥与同步 互斥:指的是多个线程不能同时访问共享变量 同步:指的是多个线程按指定的顺序执行操作 在同时有多...
    99+
    2024-04-02
  • 如何解决Java多线程死锁问题
    死锁问题 死锁定义 多线程编程中,因为抢占资源造成了线程无限等待的情况,此情况称为死锁。 死锁举例 注意:线程和锁的关系是:一个线程可以拥有多把锁,一个锁只能被一个线程拥有。 当两个...
    99+
    2024-04-02
  • java多线程并发问题如何解决
    在Java中,可以使用以下方法来解决多线程并发问题:1. 使用synchronized关键字:可以通过在方法或代码块前加上synch...
    99+
    2023-09-27
    java
  • Java多线程死锁问题怎么解决
    解决Java多线程死锁问题的常用方法有以下几种:1. 避免使用多个锁:尽量减少使用多个锁来降低出现死锁的概率。2. 按照固定的顺序获...
    99+
    2023-09-22
    Java
  • 详解SimpleDateFormat的线程安全问题与解决方案
    1. 原因SimpleDateFormat(下面简称sdf)类内部有一个Calendar对象引用,它用来储存和这个sdf相关的日期信息,例如sdf.parse(dateStr), sdf.format(date) 诸如此类的方法参数传入的日...
    99+
    2023-05-31
    simpledateformat 线程 dat
  • Java多线程 - 线程安全和线程同步解决线程安全问题
    文章目录 线程安全问题线程同步方式一: 同步代码块方式二: 同步方法方式三: Lock锁 线程安全问题 线程安全问题指的是: 多个线程同时操作同一个共享资源的时候可能会出现业务安全问题,称为线程安全问题。 举例:...
    99+
    2023-08-20
    java 安全 jvm
  • Java多线程编程中的并发安全问题及解决方法
    目录线程安全性死锁定义实现一个死锁查看死锁解决死锁其他线程安全问题单例模式线程安全性 线程安全是指我们所写的代码在并发情况下使用时,总是能表现出正确的行为;反之,未实现线程安全的代码...
    99+
    2023-05-16
    Java多线程并发安全 Java并发安全问题 Java多线程并发
  • Java项目中的线程安全问题如何解决
    这篇文章给大家介绍Java项目中的线程安全问题如何解决,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。解决方案如下:public class Demo_5 { public&nbs...
    99+
    2023-05-31
    java 线程安全 ava
  • Java多线程解决龟兔赛跑问题详解
    目录多线程4(龟兔赛跑-休眠线程)1.题目2.解题思路3.代码详解多线程4(龟兔赛跑-休眠线程) 1.题目 在龟兔赛跑中,领先的兔子因为通宵写博客,中途太累睡着了,跑输了乌龟。这个故...
    99+
    2024-04-02
  • Java多线程案例之线程池
    文章目录 一. 线程池概述1. 什么是线程池2. Java标准库提供的线程池 二. 线程池的简单实现 一. 线程池概述 1. 什么是线程池 线程池和和字符串常量池, 数据库连接池一样,...
    99+
    2023-09-04
    java 线程池 多线程
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作