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);
}
}
}
Thread.sleep方法是一个static
方法,它将当前线程“休眠”一段时间。它不能用来让其他线程进入睡眠状态......就像你正在尝试做的那样。
如果您希望子线程定期休眠,那么sleep
的调用需要由各自的线程自己完成;例如在各自的run()
方法中。
对于什么值得...没有安全方式为一个线程导致另一个线程睡觉或暂停。有一个用于暂停另一个线程的弃用API,但它有许多安全和安全问题,不应使用。
还有另一个问题。当你实例化这些类时,你已经把这些逻辑放入构造函数中。在“新”Male
和Female
对象时,会在主线程上发生这种情况。你希望代码在子线程中运行......当它们启动时。
您的Male
和Female
类需要实现Runnable.run()
方法,这就是需要实现线程逻辑的地方。
您应该得到一个编译器警告,用于调用带有实例的“sleep”。如果没有,请检查您的编译器设置并打开所有警告。 – Robert 2014-12-02 23:54:48
@Robert - 这取决于编译器... – 2014-12-03 01:28:28
对于初学者来说,而不是有A类是doesnothing除了主要方法并且实现Runnable并且有男性和女性的扩展A,考虑有男性和女性才能实现Runnable自己。其次,你的男性和女性方法在其运行方法中不包含任何内容,所以没有什么可以在另一个线程上运行。因此,你的线程首先无所作为。
*是Runnable的直接子类*您可能的意思是“实现”,因为“Runnable”是一个接口,而不是抽象类。 – 2014-12-02 22:34:15
插入明显的性别歧视笑话,女性可以在这里等待任何东西。 – 2014-12-02 22:25:18
如果您遵循以下准则,您的代码将更具可读性:http://www.oracle.com/technetwork/java/codeconventions-135099.html – 2014-12-02 22:25:34
我不知道为什么,但我看到了这个问题的'其他'图像: O – 2014-12-02 22:30:16