Java多线程数字猜测问题
/**
* @作者:胡道全
* @Description: TODO
* @邮箱:hudaoquan@enn.cn
* @ Date:2020-6-20 1:01
* @版本1.0
*/
公共类编号实现Runnable {
最终int较小= -1,较大= 1,成功= 888;
int realNumber,guessNumber,min = 0,max = 100,message =较小;
boolean pleaseGuess = false,isGiveNumber = false
Thread giveNumberThread,guessNumberThread
编号(){
giveNumberThread =新线程(this);
guessNumberThread =新线程(this);
}
@覆盖
公共无效运行(){
for(int count = 1;计数& lt10;count++) {
System.err.println(count +"?"+ message + Thread.currentThread()。getName());
setMessage(计数);
if (message == SUCCESS) {
返回;
}否则{
继续;
}
}
}
公共同步void setMessage(int count) {
if(thread . current thread()= = give number thread & amp;& ampisgivennumber = = false){
real number =(int)(math . random()* 100+1);
System.out.println("我脑子里有一个1-100的数。猜猜这是什么?= = = = "+real number);
isGiveNumber = true
//让下面的判断语句执行猜测线程。
pleaseGuess = true
}
if(thread . current thread()= = give number thread & amp;& ampisgivennumber = = true){
//如果PleaseGuess为true,则调用猜测线程,猜测线程将pleaseGuess设置为false以结束循环,即此处调用猜测线程。
while (pleaseGuess == true) {
尝试{
wait();
//在猜测线程执行完毕后,猜测线程将pleaseGuess设置为false,并在下一个循环中退出以执行后续的if语句。
} catch (InterruptedException e) {
}
}
//调用一个猜测后,开始判断猜测结果,给出消息信息。
if(real number & gt;猜测号码){
消息=较小;
系统。out.println(猜数+“你猜小了,试试大一点!”);
} else if(real number & lt;猜测号码){
消息=更大;
系统。out.println(猜数+“你猜大了,试试小的”);
}否则{
消息=成功;
系统。out.println(猜数+“太好了,你猜对了”);
}
//给出信息后,将pleaseGuess设置为true,调用猜测线程时退出wait也就是开始猜测
pleaseGuess = true
}
if(thread . current thread()= = guessNumberThread & amp;& ampisgivennumber = = true){
//当读取到猜测线程为假时,调用wait,停止猜测并调用到线程。
while (pleaseGuess == false) {
尝试{
wait();
//执行完线程后,pleaseGuess将设置为true,其中下一个循环将结束等待调用并执行后续语句。
} catch (InterruptedException e) {
}
}
//开始猜测
if(message = = small){
min = guessNumber
guess number =(min+max)/2;
System.out.println("我的第一个"+count+"猜测是"+guess number ");
} else if (message == LARGER) {
max = guessNumber
guess number =(min+max)/2;
System.out.println("我的第一个"+count+"猜测是"+guess number ");
}
pleaseGuess = false
}
notify all();
}
公共静态void main(String[] args) {
Number number =新编号();
number . give number thread . start();
number . guessnumberthread . start();
}
}
代码截图
运行结果