1

スレッドについて学び、インターネットでいくつかの例を見つけようとしています。3秒ごとに「hello, world」を出力するJavaクラスです。しかし、Runable オブジェクトの作成に関する部分は冗長であると感じています。

書く代わりに

Runnable r = new Runnable(){ public void run(){...some actions...}}; 

run()読みやすいように、メソッドを別の場所に置くことはできますか?

これは私が持っているものです:

public class TickTock extends Thread {
    public static void main (String[] arg){
        Runnable r = new Runnable(){
            public void run(){
                try{
                    while (true) {
                        Thread.sleep(3000);
                        System.out.println("Hello, world!");
                    }
                } catch (InterruptedException iex) {
                    System.err.println("Message printer interrupted");
                }
            }
        };
      Thread thr = new Thread(r);
      thr.start();
}

そして、これが私が達成したいことです

public static void main (String[] arg){ 
          Runnable r = new Runnable() //so no run() method here, 
                                  //but where should I put run()
          Thread thr = new Thread(r);
          thr.start();
    }
4

3 に答える 3

4

読みやすいように、メソッド run() を別の場所に置くことはできますか?

はい、このように独自のランナブルを作成できます

public class CustomRunnable implements Runnable{
// put run here
}

その後

Runnable r = new CustomRunnable () ;
Thread thr = new Thread(r);
于 2012-10-15T21:41:15.703 に答える
3

Java スレッドのチュートリアル から、少し異なるスタイルを使用できます。

public class HelloRunnable implements Runnable {

    public void run() {
        System.out.println("Hello from a thread!");
    }

    public static void main(String args[]) {
        (new Thread(new HelloRunnable())).start();
    }

}
于 2012-10-15T21:41:03.667 に答える
0

次のように、匿名Runnableクラスを内部静的クラスにするだけです。

public class TickTock {

    public static void main (String[] arg){
        Thread thr = new Thread(new MyRunnable());
        thr.start();
    }

    private static class MyRunnable implements Runnable {

        public void run(){
            try{
                while (true) {
                    Thread.sleep(3000);
                    System.out.println("Hello, world!");
                }
            } catch (InterruptedException iex) {
                System.err.println("Message printer interrupted");
            }
        }
    }
}

または、サンプルコードでTickTock既に拡張されているため、そのメソッドThreadをオーバーライドできます。run

public class TickTock extends Thread {

    public static void main (String[] arg){
        Thread thr = new TickTock();
        thr.start();
    }

    @Override
    public void run(){
        try{
            while (true) {
                Thread.sleep(3000);
                System.out.println("Hello, world!");
            }
        } catch (InterruptedException iex) {
            System.err.println("Message printer interrupted");
        }
    }
}
于 2012-10-15T21:45:00.970 に答える