Java线程sleep()的帮助

问题描述:

你好主要的想法是,如果男性>女性,女性线程必须等待1000毫秒(1秒),然后再次检查。我试图寻找这个,但我无法找到解决方案。可能有人请帮助我吗?(我刚开始学习线程)Java线程sleep()的帮助

public class A implements Runnable { 

    public void run(){ 
    } 

    public static void main(String[] args)throws InterruptedException { 
     int n = 3; 
     int m = 17; 
     int f = 13; 

     Thread th1 = new Thread(new male(m,n)); 

     Thread th2 = new Thread(new female(f,n)); 

     th1.start(); 
     th2.start(); 

     //not working 
     if (m>f){ 
       th2.sleep(1000); 
     } 
     else if(f>m){ 
       th1.sleep(1000);  
     } 
    } 

} 

class male extends A { 

    public male(int male, int count){ 
     while(male>0){ 
      male -= count; 
      System.out.println("m: " + male); 
     } 
    } 
} 

class female extends A { 

    public female(int female, int count){ 
     while(female>0){ 
      female -= count; 
      System.out.println("f: " + female); 
     } 
    } 
} 
+5

插入明显的性别歧视笑话,女性可以在这里等待任何东西。 – 2014-12-02 22:25:18

+0

如果您遵循以下准则,您的代码将更具可读性:http://www.oracle.com/technetwork/java/codeconventions-135099.html – 2014-12-02 22:25:34

+0

我不知道为什么,但我看到了这个问题的'其他'图像: O – 2014-12-02 22:30:16

Thread.sleep方法是一个static方法,它将当前线程“休眠”一段时间。它不能用来让其他线程进入睡眠状态......就像你正在尝试做的那样。

如果您希望子线程定期休眠,那么sleep的调用需要由各自的线程自己完成;例如在各自的run()方法中。

对于什么值得...没有安全方式为一个线程导致另一个线程睡觉或暂停。有一个用于暂停另一个线程的弃用API,但它有许多安全和安全问题,不应使用。


还有另一个问题。当你实例化这些类时,你已经把这些逻辑放入构造函数中。在“新”MaleFemale对象时,会在主线程上发生这种情况。你希望代码在子线程中运行......当它们启动时。

您的MaleFemale类需要实现Runnable.run()方法,这就是需要实现线程逻辑的地方。

+0

您应该得到一个编译器警告,用于调用带有实例的“sleep”。如果没有,请检查您的编译器设置并打开所有警告。 – Robert 2014-12-02 23:54:48

+0

@Robert - 这取决于编译器... – 2014-12-03 01:28:28

对于初学者来说,而不是有A类是doesnothing除了主要方法并且实现Runnable并且有男性和女性的扩展A,考虑有男性和女性才能实现Runnable自己。其次,你的男性和女性方法在其运行方法中不包含任何内容,所以没有什么可以在另一个线程上运行。因此,你的线程首先无所作为。

+0

*是Runnable的直接子类*您可能的意思是“实现”,因为“Runnable”是一个接口,而不是抽象类。 – 2014-12-02 22:34:15