java多线程题目的解决方案
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇文章为大家展示了java多线程题目的解决方案,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。在iteye上看到的一道多线程的题目,参考了一下网友的实现,那E
千家信息网最后更新 2026年11月03日java多线程题目的解决方案
本篇文章为大家展示了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。
分析:感觉出题人是要考察一下你是否能够很好的控制多线程,让他们有序的进行。
1、线程池:3个线程,需要使用并发库的线程池
2、锁(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 condtionContext = new HashMap(); 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; } /** * @param args */ 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多线程题目的解决方案,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。
线程
题目
方案
解决方案
三个
内容
技能
知识
顺序
有序
简明
以此类推
简明扼要
一道
代码
任务
同学
就是
感觉
数字
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技公司起名
科技互联网企业
广州百单互联网科技有限公司
互联网公司 科技公司
互联网金融 金融科技
互联网 的科技创新
紫鲸互联网科技
上海卓越科技 互联网
银川新华互联网科技学校地址
汽车互联网创新科技园
宜昌元轩互联网科技有限公司
互联网科技与大数据专业
科技类公司包括互联网吗
山东子淼互联网科技有限公司
银行科技岗属于互联网吗
江苏互联网智能科技产品出厂价
互联网科技收购价值
安徽零酒互联网科技有限公司
科技美学互联网 艺术
科技发展第三阶段互联网时代
互联网科技网
金融科技和互联网金融
海南科技产业互联网平台
小米互联网科技园设置
上海宁丞科技互联网
苏州五指互联网络科技有限
恒生互联网科技指数跳水
电子科技大学互联网创业大赛
工业互联网科技创业
重庆科技产业互联网有哪些