java 双线程猜数字
时间: 2023-11-20 18:54:50 浏览: 167
双线程猜数字是一个多线程编程的练习题,它的实现需要使用到Java的多线程机制和线程通信机制。具体实现步骤如下:
1. 创建一个Number类,该类包含一个成员变量number,表示要猜的数字,以及一个成员方法guess(),用于猜数字。
2. 创建一个GuessThread类,该类继承自Thread类,重写run()方法,在该方法中调用Number类的guess()方法进行猜数字。
3. 创建一个CheckThread类,该类继承自Thread类,重写run()方法,在该方法中判断GuessThread猜的数字是否正确。
4. 在main()方法中创建一个Number对象和两个线程对象GuessThread和CheckThread,并启动这两个线程。
下面是Java双线程猜数字的代码实现:
```java
class Number {
private int number;
public Number() {
number = (int) (Math.random() * 100 + 1);
}
public synchronized boolean guess(int guessNumber) {
if (guessNumber == number) {
System.out.println(Thread.currentThread().getName() + "猜对了!");
return true;
} else if (guessNumber > number) {
System.out.println(Thread.currentThread().getName() + "猜大了!");
return false;
} else {
System.out.println(Thread.currentThread().getName() + "猜小了!");
return false;
}
}
}
class GuessThread extends Thread {
private Number number;
public GuessThread(Number number) {
this.number = number;
}
public void run() {
int guessNumber = (int) (Math.random() * 100 + 1);
while (!number.guess(guessNumber)) {
guessNumber = (int) (Math.random() * 100 + 1);
}
}
}
class CheckThread extends Thread {
private Number number;
public CheckThread(Number number) {
this.number = number;
}
public void run() {
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (number) {
if (number.guess((int) (Math.random() * 100 + 1))) {
System.exit(0);
}
}
}
}
}
public class Test {
public static void main(String[] args) {
Number number = new Number();
GuessThread guessThread = new GuessThread(number);
CheckThread checkThread = new CheckThread(number);
guessThread.start();
checkThread.start();
}
}
```
阅读全文