java多线程题目的解决方案
发表于:2024-10-22 作者:千家信息网编辑
千家信息网最后更新 2024年10月22日,本篇文章为大家展示了java多线程题目的解决方案,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。在iteye上看到的一道多线程的题目,参考了一下网友的实现,那E
千家信息网最后更新 2024年10月22日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 MapcondtionContext = 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安全错误
数据库的锁怎样保障安全
中专网络技术课程表
国外化学药品数据库
外版手机如何连接谷歌服务器
指南针网络技术有限公司
只有自己玩的服务器连不上
苏州计算机软件开发多少钱
数据库终端配置ip详细步骤
新手学习网络技术
用自己电脑搭建免流服务器
rpc可以调用不同的数据库吗
网络通信与网络安全 分析
数据库连接池的作用与功效
网络安全手机使用利与弊
成都java软件开发前景
数据库查询和索引
网络安全法第二次
梦幻西游手游天选之子服务器
服务器压力测试标准
用什么软件实时掌握内部网络安全
网络安全学习课堂
银行网络安全宣传文案
tb服务器时间校准
服务器划伤修复
服务器钣金机箱订做
数据库如何关闭用户权限
江西南昌dns服务器虚拟主机
注重网络安全培训
服务器如何运用java代码
邦赢网络技术有限公司网址
专门放数据库的单元