Java如何为一个线程传递一个额外的对象

Dav*_*ica 0 java multithreading runnable

我不认为这是可能的,但我想告诉我的每个线程都在处理特定的对象.像这样的排序 -

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";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想以某种方式能够告诉thread t1给上运行代码string s1t2s2.现在我只是通过检查来做到这一点Thread.currentThreat.getName(),但这不是一个好方法.另一种方法是创建一个Runnable具有自己的字符串的匿名类,然后就是run那个,但那么主线程如何获得两个字符串?

Jef*_*rey 8

为什么不通过不同ThreadRunnables?

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();
Run Code Online (Sandbox Code Playgroud)

/编辑

创建一个可以实例化的类:

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();
Run Code Online (Sandbox Code Playgroud)

/ 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

是关于Executor框架的一个很好的教程.