[英]How to assign different threads to different methods of other class not using main main thread
[英]How to assign different methods to different threads in java
我对“ C”中的线程有些了解,但是对Java来说是新手。 如果我想创建三个线程,一个用于加法,第二个用于减法,第三个用于乘法,我可以简单地做
pthread_t mathThread[3];
在创建每个线程时,我可以在其参数中为其分配不同的功能。
void *add(void *arg);
void *sub(void *arg);
void *mul(void *arg);
在Java中,如果实现Runnable接口,则只能使用一个run()
方法。 我该如何实施?
最简单的方法:可以使三个不同的类实现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 */ }
},
};
您真的不需要在Java中执行此操作……我的意思是,除非您需要计算Pi或其他稍稍冗长的内容,否则您无需在单独的线程中进行基础数学运算。 如果您只是处理数学,请按行执行,编译器将根据需要进行优化。
有很多方法可以做到这一点,但是我建议如果您查看java.util.concurrent包中的Executor类,将遇到的麻烦最少。 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调用,以免混淆线程部分。
看到这里的例子,我创建了两个线程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();
}
}
这是从我自己的问题java访问不同线程中的对象
遵循本教程Java-多线程
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.