java吧 关注:1,228,085贴子:12,688,346
  • 14回复贴,共1

为什么我的运行结果和想的不一样

只看楼主收藏回复

先上图片


IP属地:北京1楼2012-07-21 11:45回复
    class SubRunnable implements Runnable
    {
    Thread stu1,stu2,stu3;
    public SubRunnable()
    {
    stu1=new Thread(this);
    stu2=new Thread(this);
    stu3=new Thread(this);
    }
    public void run()
    {
    if(Thread.currentThread()==stu1)
    {
    try
    {
    System.out.println("第一个学生睡觉了");
    stu1.sleep(60000); //第一个了睡10分钟
    }
    catch(InterruptedException e)
    {
    System.out.println("第一个学生醒了并叫醒第三个同学");
    stu3.interrupt(); //中断线程stu3
    }
    }
    else if(Thread.currentThread()!=stu1)
    {
    try
    {
    System.out.println("第二、三个学生睡觉了");
    stu2.sleep(120000); //第二个睡了20分钟
    stu3.sleep(180000); //第三个睡了30分钟
    }
    catch(InterruptedException e)
    {
    System.out.println("第二个学生醒了");
    }
    }
    }
    }
    public class Ex
    {
    public static void main(String[] args)
    {
    SubRunnable s=new SubRunnable();
    s.stu1.start();
    s.stu2.start();
    SubRunnable tech=new SubRunnable();
    //tech.stu1.interrupt();
    //tech.stu2.interrupt();
    s.stu1.interrupt();
    s.stu2.interrupt();
    }
    }


    IP属地:北京2楼2012-07-21 11:46
    回复
      我想应该是三个学生先睡觉,然后第一个学生醒来叫醒第三个学生,第二个学生醒来。


      IP属地:北京3楼2012-07-21 11:48
      回复
        能不能告诉我是哪里有问题么?


        IP属地:北京4楼2012-07-21 11:49
        回复
          没人帮忙么?初学者一个,也没违反吧规啊


          IP属地:北京5楼2012-07-21 12:01
          回复
            附原题:三个学生在课堂上睡觉,三个学生分别打算睡10分钟、20分钟、30分钟,当教师准备上课时,教师叫醒了第一和第二个同学,第一个同学醒后要叫醒第三个同学。


            IP属地:北京6楼2012-07-21 12:19
            回复
              我都注释了一遍,可还是没有发现怎么回事啊


              IP属地:北京7楼2012-07-21 12:21
              回复
                俩线程 ,第二个线程睡得更久。 第一个先走完。


                IP属地:湖北8楼2012-07-21 12:44
                收起回复


                  


                  IP属地:北京9楼2012-07-21 13:03
                  收起回复
                    package test; class SubRunnable implements Runnable {
                    Thread stu1;
                    Thread stu2;
                    Thread stu3; public SubRunnable() {
                    stu1 = new Thread(this);
                    stu2 = new Thread(this);
                    stu3 = new Thread(this);
                    stu1.start();
                    stu2.start();
                    stu3.start();
                    } public void run() {
                    if (Thread.currentThread() == stu1) {
                    try {
                    System.out.println("第一个学生睡觉了");
                    Thread.sleep(60000);
                    } catch (InterruptedException e) {
                    System.out.println("第一个学生被老师叫醒了并叫醒第三个同学");
                    stu3.interrupt(); // 中断线程stu3
                    }
                    }
                    else if (Thread.currentThread() == stu2) {
                    try {
                    System.out.println("第二个学生睡觉了");
                    Thread.sleep(120000);
                    } catch (InterruptedException e) {
                    System.out.println("第二个学生被老师叫醒了");
                    }
                    }
                    else if (Thread.currentThread() == stu3) {
                    try {
                    System.out.println("第三个学生睡觉了");
                    Thread.sleep(180000);
                    } catch (InterruptedException e) {
                    System.out.println("第三个学生醒了");
                    }
                    }
                    }
                    } public class Ex {
                    public static void main(String[] args) throws Exception {
                    SubRunnable tech = new SubRunnable();
                    Thread.sleep(1000);
                    tech.stu1.interrupt();
                    tech.stu2.interrupt();
                    }
                    }
                    


                    IP属地:江苏10楼2012-07-21 13:10
                    收起回复
                      贴一下我修改的代码,方便以后观看

                      我借鉴了楼上吧友的回复,将老师来的时间延长一段,使两个线程可以提前运行,然后中断学生一、二的休眠,学生一中断学生三的休眠。菜鸟一枚,只想让和我一样的人一起学习。


                      IP属地:北京11楼2012-07-21 14:49
                      回复