2013-08-08 1 views
-1

Я пытаюсь сделать поток сна из метода run() класса, который я использую в потоке, который я создаю, тем самым имея поток спать, когда его вызвали, и я получаю и ошибка от затмения. Цель состоит в том, чтобы просто несколько раз протестировать код и увидеть, что потоки, выдаваемые в разное время, когда я знаю, что выбрать нитки для запуска, не являются решающей вещью.JAVA Пытается запустить метод сна внутри объекта runnable, помещенного в новый поток

мой код выглядит следующим образом

package multithreading; 

    public class Mainclass { 

     public static void main(String[] args) { 
      run work= new run(); 

      Thread thread = new Thread(work); 

      thread.start(); 

      System.out.println("main thread is running"); 

     }// end of main 

    }// end of class mainclass 

здесь класс бежать, что я создания экземпляра/объекта в магистральный вверх над

public class Run implements Runnable{// this is the beggining of the class 

    public void run(){ 

     try { 
      thread.sleep(200); 
     }catch (InterruptedException ex) { 

     } 
     System.out.println("the second thread is running"); 
    }// end of run method of the class run 
}// end of class run 

любая помощь была бы значительно appreaciated

+4

Вы когда-нибудь слышали о [именования] (http://www.oracle.com/technetwork/java/codeconv-138413.html)? Названия классов должны начинаться с заглавных букв, например, в вашем случае 'MainClass'. Таким образом, легче понять, имеем ли мы дело с классом/конструктором или с переменной/методом. – Pshemo

+5

* «и я получаю и ошибка от затмения» *. Ну, возможно, вы должны поделиться этим сообщением об ошибке с нами ... –

+0

Переменная 'thread' в вашем методе' main() 'является локальной переменной, а не в области метода' run() 'в' Runnable' реализация. Кроме того, 'Thread.sleep()' является статическим методом; он всегда спит в текущем потоке (поток, который вызывает 'sleep()'), даже если вы вызываете его через экземпляр (который работает, но плохой стиль ... как ваше пренебрежение к соглашениям об именах Java). – erickson

ответ

0

Похоже, ваша проблема - простая ошибка компиляции Java и легко исправлена; см. @ MadProgrammer's Answer,

Для чего вы не должны использовать sleep, чтобы заставить вещи работать до или после других вещей. Он не является надежным и может читать (неэффективный) опрос, или отставание, или и то, и другое.

Есть более эффективные способы заставить один поток ждать чего-то еще ... в зависимости от того, что вы действительно пытаетесь сделать.

6

sleep - static метод Thread. Java чувствительна к регистру.

Попробуйте использовать Thread.sleep вместо thread.sleep

+0

Спасибо, что работает! это был самый прямой ответ. – fred

Смежные вопросы