Java多线程类方法?

时间:2011-12-10 01:08:26

标签: java multithreading methods parallel-processing

我是Java中多线程的新相对论,我想知道是否可以并行执行中的方法。所以不要这样:

public void main() {
  this.myMethod();
  this.myMethod();
}

...在上一次调用完成后触发类中的每个方法,它们将并行完成。我知道可以完成以下示例,但这涉及创建新类,我想避免这样做:

public class HelloRunnable implements Runnable {
  public void run() {
    System.out.println("Hello from a thread!");
  }

  public static void main(String args[]) {
    (new Thread(new HelloRunnable())).start();
  }
}

为了清楚起见,我看到了this example,但对我来说没有任何帮助。

解决此问题的关键是使用public static方法吗?无论哪种方式,有人可以提供一个例子来说明如何使用他们的解决方案吗?

感谢您的时间!

2 个答案:

答案 0 :(得分:4)

抱歉,根据您的限制无法完成。如果不创建Thread对象,则无法在Java线程中运行任何内容,以及包含run()方法的内容:要么是实现Runnable的单独类,要么是扩展{{ {1}}。你指出的问题显示了究竟要做什么;没有“更好”的答案,也没有任何其他答案。

答案 1 :(得分:2)

我可能会这样做。 CountDownLatch和Executors类是Java 5中的便捷实用程序,可以使这种东西更容易。在这个特定的例子中,CountDownLatch将阻塞main(),直到两个并行执行完成。

(所以回答你的问题:它比你想象的更糟糕!你必须写更多代码!)

ExecutorService EXECUTOR_SERVICE = Executors.newCachedThreadPool();

public void main() {
  final CountDownLatch cdl = new CountDownLatch(2); // 2 countdowns!
  Runnable r = new Runnable() { public void run() {
    myMethod();
    cdl.countDown();
  } };

  EXECUTOR_SERVICE.execute(r);
  EXECUTOR_SERVICE.execute(r);

  try {
    cdl.await();
  } catch (InterruptedException ie) {
    Thread.currentThread().interrupt();
  }
}