我对'C'中的线程有所了解,但在Java中对它们不熟悉。如果我想创建三个线程,一个用于加法,第二个用于减法,第三个用于乘法我可以简单地执行
pthread_t mathThread[3];
并且在创建每个线程时,我可以在它们的参数中为它们分配不同的函数。
void *add(void *arg);
void *sub(void *arg);
void *mul(void *arg);
在Java中,如果我实现Runnable接口,那么我只能使用一个run()
方法。我该如何实现上述目标?
答案 0 :(得分:3)
创建三个不同的runnable:
Runnable[] runnables = new Runnable[] {
new Runnable() {
public void run() { /* add code here */ }
},
new Runnable() {
public void run() { /* sub code here */ }
},
new Runnable() {
public void run() { /* mul code here */ }
},
};
答案 1 :(得分:1)
你真的不需要在Java中这样做...我的意思是你不需要在一个单独的线程中有基本的数学,除非你计算Pi或其他东西只是一点点冗长。 如果你只是处理数学,那就按顺序进行,编译器根据需要进行优化。
有很多方法可以做到这一点,但如果您查看 java.util.concurrent中的执行者类,我建议您将遇到最少的麻烦。 / strong>包。 javadocs有很多关于如何使用它们的信息(所有你需要的信息才能让它运行)。
您可以在此处找到这些文档: http://docs.oracle.com/javase/6/docs/api/index.html?java/util/concurrent/package-summary.html
假设你仍然想要这么做:
然而,在刚刚给你答案的好处中,你可以像noMADD建议那样做,或者你也可以使用匿名内部类。
class MathStuff {
boolean running = false;
int result = 0;
boolean isRunning(){
return running;
}
int getResult(){
return result;
}
int add(final int arg0, final int arg1){
Thread t = new Thread(){
public void run(){
running = true;
result = arg0 + arg1;
running = false;
}
};
t.start();
}
}
请注意,我添加了正在运行的成员变量,因为结果在返回true时无效。通常我会用一个事件监听器构建这种东西,它会在操作完成时接收回调,但是我使用了一个简单的isRunning调用,以免过多地混淆线程部分。
答案 2 :(得分:0)
看到这里的例子我创建了两个线程t1和t2,其中t1执行加法,t2执行减法。
class ThreadClass {
public static void main(String a[]) {
Thread addthread = new Thread() {
public void run() {
//addition logic here
}
};
Thread subtractThread = new Thread() {
public void run() {
//subtraction logic here
}
};
addthread .start();
subtractThread .start();
}
}
进行操作