当前位置: 首页 > wzjs >正文

成都专业手机网站建设服务wordpress 插件 更新

成都专业手机网站建设服务,wordpress 插件 更新,杭州系统vi设计,wordpress中文文档题目:线程 A 生成随机数,另外两个线程来猜数,线程 A 可以告诉猜的结果是大还是小,两个线程都猜对后,游戏结束,编写代码完成。 一、Semaphore 多个线程可以同时操作同一信号量,由此实现线程同步…

题目:线程 A 生成随机数,另外两个线程来猜数,线程 A 可以告诉猜的结果是大还是小,两个线程都猜对后,游戏结束,编写代码完成。

一、Semaphore

多个线程可以同时操作同一信号量,由此实现线程同步。

public class Main {private static Semaphore s1 = new Semaphore(0);private static Semaphore s2 = new Semaphore(0);// 待判断的线程private static Queue<Semaphore> judgeQueue = new LinkedList<>();// 保存线程猜的数private static Map<Semaphore, Integer> guessMap = new ConcurrentHashMap<>();// 保存判断结果private static Map<Semaphore, Integer> resMap = new ConcurrentHashMap<>();// 保存猜数线程二分过程中的左右边界private static Map<Semaphore, Pair<Integer, Integer>> edgeMap = new ConcurrentHashMap<>();private static Set<Semaphore> set = new HashSet<>();public static void main(String[] args) {new Thread(Main::judge, "判断线程").start();new Thread(() -> guess(s1), "猜线程1").start();new Thread(() -> guess(s2), "猜线程2").start();}private static void judge() {System.out.println("开始猜数!");int num = ThreadLocalRandom.current().nextInt(100);System.out.printf("要猜的数是 %d\n", num);set.add(s1);set.add(s2);s1.release();s2.release();while (true) {while (!judgeQueue.isEmpty()) {Semaphore s = judgeQueue.poll();Integer guessNum = guessMap.get(s);if (guessNum != null) {if (guessNum > num) {resMap.put(s, 1);} else if (guessNum < num) {resMap.put(s, 2);} else {resMap.put(s, 0);}s.release();} else {}}if (set.isEmpty()) {System.out.println("所有线程猜数完成!\n");break;}}}private static void guess(Semaphore s) {Pair<Integer, Integer> edge = new Pair<>(0, 100);edgeMap.put(s, edge);int guess = 0;while (true) {try {s.acquire();guess = guessNum(guess, s);if (guess != -1) {guessMap.put(s, guess);judgeQueue.add(s);} else {System.out.printf("%s 猜数成功!\n", Thread.currentThread().getName());set.remove(s);break;}} catch (InterruptedException e) {throw new RuntimeException(e);}}}private static int guessNum(int guess, Semaphore s) {Pair<Integer, Integer> pair = edgeMap.get(s);if (resMap.containsKey(s)) {int res = resMap.get(s);// 1 表示猜大了if (res == 1) {edgeMap.put(s, new Pair<>(pair.getKey(), guess - 1));} else if (res == 2) {edgeMap.put(s, new Pair<>(guess + 1, pair.getValue()));} else {// 猜中了return -1;}guess = (pair.getKey() + pair.getValue()) / 2;} else {guess = ThreadLocalRandom.current().nextInt(100);}System.out.printf("%s 猜的数是:%s\n", Thread.currentThread().getName(), guess);return guess;}
}

暂时没想到更好的解法,也欢迎大家指教。

http://www.dtcms.com/wzjs/603545.html

相关文章:

  • 58网站自己做软件外包企业排名
  • 泰安建材网站建设电话做房产的有哪些网站
  • 黑龙江两学一做网站商城微信网站开发
  • 阳逻开发区网站建设中企动力wordpress访客
  • 不备案网站网站推广教程分享
  • 自己做网站推广产品wordpress上传教程
  • 免费邯郸网站建设深圳网站建_企业网站设计定制
  • 网站开发需要哪些资料新手学做网站 视频百度网盘
  • 苏州网站建设要点盘锦微信网站建设
  • 不同类型网站漯河网站建设(千弘网络)
  • 建设网站能赚钱广告设计图片赏析
  • 做移动网站上海公司网站
  • 手机端网站提交表单验证代码自动升级wordpress失败
  • 食品网站开发线上学编程哪个机构比较好
  • 建材网站建设方案wordpress 扁平化
  • 天河区pc端网站建设扬州外贸网站建设公司
  • 品牌推广网站怎么做wordpress themes free download
  • 在公司网站投简历该怎么做网站建设华企
  • 龙华民治网站建设网站制作手机版
  • 郑州外贸网站建设及维护网站的建站过程
  • 做列表的网站深圳坂田网站设计公司有哪些
  • 定西建设厅网站小程序科技有限公司
  • 企业网络搭建是什么北京网站优化方式
  • 台州建设银行官方网站安康企业网站定制
  • 那个网站有兼职做室内设计做一个电子商务网站在哪里做
  • 建设银行网站账号怎么注销关于建设集团公司网站的报告
  • wordpress开启子站点wordpress使用实例
  • 公司简历模版优化网站排名方法
  • 全国最好网站建设广告设计与制作app
  • 有官网建手机网站品牌网站建设岗位职责