如何在java中为不同的线程分配不同的方法

时间:2012-01-25 03:50:48

标签: java multithreading

我对'C'中的线程有所了解,但在Java中对它们不熟悉。如果我想创建三个线程,一个用于加法,第二个用于减法,第三个用于乘法我可以简单地执行

pthread_t mathThread[3];

并且在创建每个线程时,我可以在它们的参数中为它们分配不同的函数。

void *add(void *arg);
void *sub(void *arg);
void *mul(void *arg);

在Java中,如果我实现Runnable接口,那么我只能使用一个run()方法。我该如何实现上述目标?

3 个答案:

答案 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();
    }
}

这是我自己的问题java access an object in different threads

按照本教程Java - Multithreading

进行操作