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 s1和t2上s2.现在我只是通过检查来做到这一点Thread.currentThreat.getName(),但这不是一个好方法.另一种方法是创建一个Runnable具有自己的字符串的匿名类,然后就是run那个,但那么主线程如何获得两个字符串?
为什么不通过不同Thread的Runnables?
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框架的一个很好的教程.