多线程 猜数字
来源:互联网 发布:淘宝阿迪达斯旗舰店 编辑:程序博客网 时间:2024/06/05 21:04
作业2:
用两个线程玩猜数字游戏,第一个线程负责随机给出1~100之间的一个整数,第二个线程负责猜出这个数。要求每当第二个线程给出自己的猜测后,第一个线程都会提示“猜小了”、“猜大了”或“猜对了”。猜数之前,要求第二个线程要等待第一个线程设置好要猜测的数。第一个线程设置好猜测数之后,两个线程还要相互等待,其原则是:第二个线程给出自己的猜测后,等待第一个线程给出的提示;第一个线程给出提示后,等待给第二个线程给出猜测,如此进行,直到第二个线程给出正确的猜测后,两个线程进入死亡状态。
public class Number implements Runnable { final int SMALLER=-1,LARGER=1,SUCESS=8; int realNumber,guessNumber,min=0,max=100,message =SMALLER; boolean pleaseGuess = false,isGiveNumber=false; Thread giveNumberThread,guessNumberThread; public Number() { giveNumberThread = new Thread(this); guessNumberThread = new Thread(this); }@Overridepublic void run() {// TODO Auto-generated method stubfor(int count=1;true;count++){ setMessage(count); if(message==SUCESS){ return; } }}public synchronized void setMessage(int count) { // TODO Auto-generated method stub if(Thread.currentThread()==giveNumberThread&&isGiveNumber==false){ realNumber = (int) (Math.random()*100)+1; System.out.println("随机给一个1至100之间的数,猜猜是多少?"+realNumber); isGiveNumber = true; pleaseGuess=true; } if(Thread.currentThread()==giveNumberThread){ while (pleaseGuess==true) try { wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(realNumber>guessNumber){ message = SMALLER; System.out.println("猜小了"); }else if (realNumber<guessNumber){ message = LARGER; System.out.println("猜大了"); }else{ message = SUCESS; System.out.println("猜对了"); } pleaseGuess = true; } if(Thread.currentThread()==guessNumberThread&&isGiveNumber==true){ while(pleaseGuess==false) try { wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(message==SMALLER){ min = guessNumber; guessNumber = (min+max)/2; System.out.println("我第"+count+"猜这个数是:"+guessNumber); }else if(message==LARGER){ max = guessNumber; guessNumber = (min+max)/2; System.out.println("我第"+count+"猜这个数是:"+guessNumber); } pleaseGuess = false; } notifyAll(); }}
public class Test{public static void main(String[] args) { // TODO Auto-generated method stub Number number = new Number(); number.giveNumberThread.start(); //启动线程 number.guessNumberThread.start(); }}
阅读全文
0 0
- 多线程 猜数字
- 多线程——猜数字
- 多线程之猜数字游戏
- 猜数字——多线程
- Java多线程之双线程猜数字
- Java作业-猜数字(多线程)
- 15周多线程2 猜数字
- Java多线程打印数字
- 数字加减多线程
- 多线程交替打印数字
- 多线程交替打印数字
- 第15周多线程_猜数字游戏
- 多线程练习题目--利用多线程打印数字
- 一个猜数字的小游戏—C# 控件的动态加载和应用 多线程
- 使用多线程求一列数字的和
- java多线程连续打印字母数字问题
- java多线程交替打印数字和字母
- 猜数字
- ssm框架配置相关的问题。
- 面向对象的含义
- JavaScript创建对象的三种方法
- 基础练习 特殊回文数
- java网页版加好友功能实现思路
- 多线程 猜数字
- 笨方法学python: ex20, 函数和文件
- ubuntu16.04 安装Docker教程
- 欢迎使用CSDN-markdown编辑器
- Spark中算子
- TPS波动各种原因总结,做过的项目大概总结下有5中以上情况...
- 树莓派(RPi) CentOS7扩展内存卡剩余空间
- 【ML学习笔记】10:机器学习中的数学基础7(张集,秩,维度,行阶梯形)
- 不过的小东东