0

これが可能だとは思いませんが、各スレッドに特定のオブジェクトで動作するように指示したいと思います。このように並べ替え -

class Tester implements Runnable{
    String s1, s2;
    Thread t1, t2;

    test(){
        t1 = new Thread(this, "t1");
        t2 = new Thread(this, "t2");
        t1.start();
        t2.start();
    }

    public void run(){
        if(this is t1){
            s1="s1";
        }
        if(this is t2){
            s2="s2";
        }
    }
}

どういうわけか、thread t1コードを何度も実行するように指示できるようにしたいstring s1と考えています。今は単に checkiing するだけですが、それは良い方法ではありません。別の方法は、独自の文字列とその上にある匿名クラスを作成することですが、その後、メインスレッドはどのようにして両方の文字列を取得するのでしょうか?t2s2Thread.currentThreat.getName()Runnablerun

4

2 に答える 2

8

Thread異なるs の異なるsを渡さないのはなぜRunnableですか?

Runnable r1 = new Runnable() { public void run() { /* this is r1 */ } };
Runnable r2 = new Runnable() { public void run() { /* this is r2 */ } };
Thread t1 = new Thread(r1);
Thread t2 = new Thread(r2);
t1.start();
t2.start();

/編集

インスタンス化できるクラスを作成します。

public class MyRunnable implements Runnable {
    private final String s;

    public MyRunnable(Stirng s) {
        this.s = s;
    }

    public void run() {
        // do something with s
    }
}

Thread t1 = new Thread(new MyRunnable("s1"));
Thread t2 = new Thread(new MyRunnable("s2"));
t1.start();
t2.start();

/e2

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class ExecutorServiceExample {
    private static class CallableExample implements Callable<Integer> {
        private final Object foo;

        private CallableExample(Object foo) {
            this.foo = foo;
        }

        @Override
        public Integer call() {
            // do something and return it
            return foo.hashCode();
        }

    }

    public static void main(String[] args) throws InterruptedException, ExecutionException {
        ExecutorService e = Executors.newFixedThreadPool(2);
        Future<Integer> f1 = e.submit(new CallableExample("foo"));
        Future<Integer> f2 = e.submit(new CallableExample("bar"));

        System.out.println(f1.get());
        System.out.println(f2.get());

        e.shutdown();
    }
}

これは、フレームワークに関する優れたチュートリアルExecutorです。

于 2013-07-02T16:55:50.407 に答える
0

Thread Localの使用をお勧めします

ここここからダミーの例にアクセスできます

于 2013-07-02T20:15:21.350 に答える