我不认为这是可能的,但我想告诉我的每个线程都在处理特定的对象。像这样排序 -
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
和t2
s2
上运行代码。现在我只是通过检查Thread.currentThreat.getName()
来做到这一点,但这不是一个好方法。另一种方法是创建一个匿名的Runnable
类,它有自己的字符串,只有run
,但那么主线程如何获得两个字符串?
答案 0 :(得分:8)
为什么不传递不同的Thread
个不同的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();
}
}
Here是关于Executor
框架的好教程。
答案 1 :(得分:0)
我建议使用Thread Local
中的虚拟示例