2017-11-17 58 views
-1

我想在打印过程后停止注册的秒数,但是当我运行播放功能时,它不会进入睡眠状态。 我可以让播放功能睡眠,但我想直接在运行功能中运行thread.sleep()。这是可能的吗?我该如何做到这一点?java中的线程 - 使用内部运行睡眠

我有以下代码:

public class Player implements Runnable { 
    private String name; 
    private String MusicalInstrument; 
    Player(String name, String MusicalInstrument) { 
     this.name = name; 
     this.MusicalInstrument = MusicalInstrument; 
    } 
    public void run() { 
     try { 
      play(); 
      Thread.sleep(5000); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 


    public void play() { 
     while (true) { 
      // print a message 
      System.out.println(name + " is playing " + MusicalInstrument); 
     } 
    } 
} 
+1

所以你有一个无限循环,不明白为什么它是无限的? –

+1

这个问题不是'睡眠',而是'while(true)' –

+0

作为一个挑剔的玩家,'MusicalInstrument'应该是'musicalInstrument',因为它不是一个类名。 –

回答

5

你只是不断地去打印,因为你而()将无限期运行,您的播放方法里面,所以你永远不会返回并到达内部的Thread.sleep方法调用你的run()方法。你应该重新修改你的方法,使其更适合你所要做的事情。

public void run() { 
    while(true) 
    { 
     try { 
      play(); 
      Thread.sleep(5000); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 
} 


public void play() { 
    System.out.println(name + " is playing " + MusicalInstrument); 
} 
+0

我假定您的意思是“您永远不会达到sleep()方法”... – Gray