package homework.day1_12;
//1. 双线程猜数字
// 用两个线程玩猜数字游戏,第一个线程负责随机给出1~10之间的一个整数,第二个线程负责猜出这个数。
// 要求:每当第二个线程给出自己的猜测后,第一个线程都会提示“猜小了”、“猜 大了”或“猜对了”。
// 猜数之前,要求第二个线程要等待第一个线程设置好 要猜测的数。
// 第一个线程设置好猜测数之后,两个线程还要相互等待,其原 则是:第二个线程给出自己的猜测后,等待第一个线程给出的提示;
// 第一个 线程给出提示后,等待第二个线程给出猜测,如此进行,直到第二个线程给 出正确的猜测后,两个线程进入死亡状态。
public class Test1 {
public static String lock = "jaskjaksj";
public static boolean temp =true;
public static void main(String[] args) {
MyThread2 myThread2 =new MyThread2();
MyThread1 myThread1 = new MyThread1(myThread2);
Thread t1 = new Thread(myThread1);
Thread t2 = new Thread(myThread2);
t1.start();
t2.start();
}
}
//创建一个类使两个线程共享变量
import java.util.Random;
public class RandomNum {
private int RandomNum;//电脑随机数
private Boolean flag =false;//线程wait()(true) notifyAll()(false)
private int guessNum=50;//猜数默认为50
private int bigOrSmall;//表示猜测结果,1为猜对了,0为没对
private String msg;//提示信息
Random r =new Random();
public RandomNum() {
RandomNum = r.nextInt(1,11);
}
public int getRandomNum() {
return RandomNum;
}
public void setRandomNum(int randomNum) {
RandomNum = randomNum;
}
public Boolean getFlag() {
return flag;
}
public void setFlag(Boolean flag) {
this.flag = flag;
}
public int getGuessNum() {
return guessNum;
}
public void setGuessNum(int guessNum) {
this.guessNum = guessNum;
}
public int getBigOrSmall() {
return bigOrSmall;
}
public void setBigOrSmall(int bigOrSmall) {
this.bigOrSmall = bigOrSmall;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Random getR() {
return r;
}
public void setR(Random r) {
this.r = r;
}
@Override
public String toString() {
return "RandomNum{" +
"RandomNum=" + RandomNum +
'}';
}
}
// 电脑给出数字提示猜的对不对的线程
import java.util.Random;
import java.util.Scanner;
public class MyThread1 implements Runnable{
MyThread2 myThread2;
Random r =new Random();
int num = r.nextInt(100);
public MyThread1(MyThread2 myThread2) {
this.myThread2 = myThread2;
}
@Override
public void run() {
synchronized (Test1.lock){
try {
//系统给一个随机值
System.out.println("电脑随机数为"+num);
Scanner sc =new Scanner(System.in);
//玩家猜数字
System.out.println("请猜一个数(1-100)");
Test1.lock.wait();
if(myThread2.pNum==num){
System.out.println("恭喜你猜对了!!!");
Test1.temp =false;
} else if (myThread2.pNum>num) {
System.out.println("猜大了!!!");
Test1.lock.notify();
}else {
System.out.println("猜小了");
Test1.lock.notify();
}
Test1.lock.wait();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
}
//玩家线程
import java.util.Scanner;
public class MyThread2 implements Runnable {
int pNum;
@Override
public void run() {
Scanner sc = new Scanner(System.in);
synchronized (Test1.lock) {
//玩家输入数字
while (true) {
try {
if(Test1.temp){
System.out.println("请输入");
pNum = sc.nextInt();
Test1.lock.notify();
Test1.lock.wait();
}else{
break;
}
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
}
}
01-13
238
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交