我是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
方法吗?无论哪种方式,有人可以提供一个例子来说明如何使用他们的解决方案吗?
感谢您的时间!
答案 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();
}
}