面试问题-使用Java线程做数学运算
这是一个展示如何使用join()方法的例子。
问题:
使用Java多线程计算表达式1*2/(1+2)的值。
解决方案:
使用一个线程做加法运算,另一个线程做乘法运算,还有一个主线程main做除法运算。由于线程之间不需要通讯,所以我们只需要考虑线程的执行顺序。
在main线程中,我们让加法运算线程和乘法运算线程join到主线程,join()方法的作用是使main方法等待,直到调用join的线程执行完毕。在这个例子中,我们希望加法运算线程和乘法运算线程先结束,然后在计算除法运算。
package simplejava; class Add extends Thread { int value; public void run() { value = 1 + 2; } } class Mul extends Thread { int value; public void run() { value = 1 * 2; } } public class Q22 { public static void main(String[] args) { Add t1 = new Add(); Mul t2 = new Mul(); t1.start(); t2.start(); try { t1.join(); t2.join(); } catch (InterruptedException e) { e.printStackTrace(); } double n = ((double) t2.value / t1.value); System.out.println(n); } }
译文链接:http://www.programcreek.com/2012/08/interview-question-use-java-thread-to-do-math-calculation/