當前位置:編程學習大全網 - 源碼下載 - java多線程猜數字問題

java多線程猜數字問題

package practice12;

/**

* @Author: HuDaoquan

* @Description: TODO

* @Email: hudaoquan@enn.cn

* @Date: 2020-6-20 1:01

* @Version 1.0

*/

public class Number implements Runnable {

final int SMALLER = -1, LARGER = 1, SUCCESS = 888;

int realNumber, guessNumber, min = 0, max = 100, message = SMALLER;

boolean pleaseGuess = false, isGiveNumber = false;

Thread giveNumberThread, guessNumberThread;

Number() {

giveNumberThread = new Thread(this);

guessNumberThread = new Thread(this);

}

@Override

public void run() {

for (int count = 1; count < 10; count++) {

System.err.println(count + " ? " + message + Thread.currentThread().getName());

setMessage(count);

if (message == SUCCESS) {

return;

} else {

continue;

}

}

}

public synchronized void setMessage(int count) {

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 && isGiveNumber == true) {

//pleaseGuess為true,調用猜線程,猜線程將pleaseGuess置為false,結束循環,也就是在此調用猜線程

while (pleaseGuess == true) {

try {

wait();

// 猜線程執行完,猜線程將pleaseGuess置為false,下壹次循環退出while,執行後續if語句

} catch (InterruptedException e) {

}

}

// 調用完壹次猜,開始判斷猜的結果並給出message信息

if (realNumber > guessNumber) {

message = SMALLER;

System.out.println(guessNumber + "妳猜小了,大點試試!");

} else if (realNumber < guessNumber) {

message = LARGER;

System.out.println(guessNumber + "妳猜大了,小點試試");

} else {

message = SUCCESS;

System.out.println(guessNumber + "太棒啦,妳猜對了呢");

}

// 給完信息,將pleaseGuess置為true,給猜線程調用的時候退出wait;也就是開始猜

pleaseGuess = true;

}

if (Thread.currentThread() == guessNumberThread && isGiveNumber == true) {

// 讀到猜線程為false,則調用wait,停止猜,調用給線程

while (pleaseGuess == false) {

try {

wait();

// 給線程執行完會將pleaseGuess置為true,此處下壹次循環即會結束wait調用,執行後續語句

} catch (InterruptedException e) {

}

}

// 開始猜

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 static void main(String[] args) {

Number number = new Number();

number.giveNumberThread.start();

number.guessNumberThread.start();

}

}

代碼截圖

運行結果

  • 上一篇:最大硬幣源代碼
  • 下一篇:Pytest測試框架源代碼
  • copyright 2024編程學習大全網