双线程猜数字

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);
                }
            }
        }


    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值