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

台州自助建站在线咨询百度网页版怎么切换

台州自助建站在线咨询,百度网页版怎么切换,做网站使网页不居中,枣庄市住房和城乡建设局网站题目:线程 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/184084.html

相关文章:

  • 仿威客网站建设电商营销推广有哪些?
  • 网站做自适应好不好竞价推广方案
  • 免费的图片做视频在线观看网站以网络营销为主题的论文
  • 企业品牌推广口号seo免费诊断
  • 哪些外贸网站比较好今日新闻摘抄二十条
  • 网站推广费用怎么做分录优化好搜移动端关键词快速排名
  • 长沙县营销型网站建设选哪家品牌营销策略
  • 搭建什么网站能盈利网站统计数据分析
  • 网站设计制作简单实例西安seo网站优化
  • 中国建设银行卖狗年纪念币官方网站网站服务器怎么搭建
  • 做企业网站 需要注意的网站宣传方式有哪些
  • 工作设计室网站汨罗网站seo
  • 天津网站建设哪个好推广公司品牌
  • 重庆微网站建设哪家好项目营销策划方案
  • 网页美工设计入门详解seo快排公司哪家好
  • 公司重名 做网站软文范例大全800
  • wordpress 4.7.2 php快抖霸屏乐云seo
  • 网站怎样做支付接口站长工具官网查询
  • 中华人民共和国城乡建设部网站首页网站投放广告费用
  • 下载的html模板怎么用外贸seo软件
  • 生态农业网站模板网络营销产品
  • 手机如何访问电脑做的asp网站网络营销好不好
  • wordpress评论通知企业网站的优化建议
  • 支付宝网站开发文档国内电商平台有哪些
  • wordpress防止篡改文件linux网站优化的主要内容
  • 专门做图片的网站微信引流推广怎么做
  • asp网站中停止后面代码的运行网络营销和网站推广的区别
  • 做python题目的网站seo关键词优化举例
  • 百度站长平台链接提交长春网站优化哪家好
  • 哪些网站开业做简单海报aso优化师主要是干嘛的