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 s1t2s2Thread.currentThreat.getName()Runnablerun

4

2 回答 2

8

为什么不通过不同Thread的s不同Runnable的s?

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 回答