繁体   English   中英

如何在Java中将不同的方法分配给不同的线程

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM