56

私はスレッドが初めてです。メインスレッドとは別に動作する単純な関数を作成したかったのです。しかし、うまくいかないようです。新しいスレッドを作成し、メインスレッドで起こっていることとは関係なく、そこでいくつかのことをしたいだけです。このコードは奇妙に見えるかもしれませんが、私はこれまでスレッド化の経験があまりありません。これの何が問題なのか説明してもらえますか?

  public static void main(String args[]){
      test z=new test();

      z.setBackground(Color.white);

      frame=new JFrame();
      frame.setSize(500,500);
      frame.add(z);
      frame.addKeyListener(z);
      frame.setVisible(true);

      one=new Thread(){
          public void run() {
              one.start();
              try{
                  System.out.println("Does it work?");
                  Thread.sleep(1000);
                  System.out.println("Nope, it doesnt...again.");
              } catch(InterruptedException v){System.out.println(v);}
          }
      };
  }
4

10 に答える 10

107

スレッドone.start()のメソッドでメソッドを呼び出しています。runただし、このrunメソッドは、スレッドが既に開始されている場合にのみ呼び出されます。代わりにこれを行います:

one = new Thread() {
    public void run() {
        try {
            System.out.println("Does it work?");

            Thread.sleep(1000);

            System.out.println("Nope, it doesnt...again.");
        } catch(InterruptedException v) {
            System.out.println(v);
        }
    }  
};

one.start();
于 2013-07-20T03:41:55.207 に答える
26

あなたは次のようにすることができます:

    Thread t1 = new Thread(new Runnable() {
    public void run()
    {
         // code goes here.
    }});  
    t1.start();
于 2014-03-09T18:24:24.667 に答える
13

目標は、start() と join() を 1 か所で呼び出すコードを作成することでした。パラメータ匿名クラスは匿名関数です。new Thread(() ->{})

new Thread(() ->{
        System.out.println("Does it work?");
        Thread.sleep(1000);
        System.out.println("Nope, it doesnt...again.");       
}){{start();}}.join();

匿名クラスの本体には、start() を呼び出すインスタンス ブロックがあります。その結果、join() と呼ばれるクラス Thread の新しいインスタンスが作成されます。

于 2014-12-17T22:26:44.763 に答える
0

より簡単な方法は次のとおりです。

new Thread(YourSampleClass).start();    
于 2014-11-20T01:08:13.673 に答える
0

これを試してください。私の解決策を見れば、すべてを完全に理解できるでしょう。

Javaでスレッドを作成する方法は2つしかありません

Runnable 実装あり

class One implements Runnable {
@Override
public void run() {
    System.out.println("Running thread 1 ... ");
}

拡張スレッド付き

class Two extends Thread {
@Override
public void run() {
    System.out.println("Running thread 2 ... ");
}

ここにあなたのMAINクラス

public class ExampleMain {
public static void main(String[] args) {

    One demo1 = new One();
    Thread t1 = new Thread(demo1);
    t1.start();

    Two demo2 = new Two();
    Thread t2 = new Thread(demo2);
    t2.start();
}

}

于 2018-09-27T10:21:44.350 に答える