分析
需要共享一些变量,当前的求和位置,目前的累计和,和完成求和的线程个数
每个线程有一个自己的编号,当flag % 6 == index就可以进行一次求和,并输出信息,否则则skip
这样保证了他们每个线程求和数都是几乎一样的
最后main线程需要等待所有的thread退出,通过exitNum来判断是否满足6个,最后退出前输出求和信息
code
package calculate;public class getSum {public static void main(String []args) {Share share = new Share();TestThread t1 = new TestThread(share, 0);TestThread t2 = new TestThread(share, 1);TestThread t3 = new TestThread(share, 2);TestThread t4 = new TestThread(share, 3);TestThread t5 = new TestThread(share, 4);TestThread t6 = new TestThread(share, 5);t1.start();t2.start();t3.start();t4.start(); t5.start();t6.start();while(share.exitNum != 6) {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();break;}}System.out.println("最终的结果是" + Long.toString(share.sum));}}class Share {public volatile int flag = 0;public volatile long sum = 0;public volatile int exitNum = 0;
}class TestThread extends Thread {private Share share;private int index;public TestThread(Share share, int index) {this.share &#61; share;this.index &#61; index;}public void run() {while (share.flag <&#61; 1000) {if(share.flag % 6 &#61;&#61; index) {share.sum &#43;&#61; share.flag;System.out.println("thread" &#43; index &#43; " is adding" &#43; share.flag);share.flag &#43;&#61; 1;}}share.exitNum &#43;&#61; 1;System.out.println("thread" &#43; index &#43; " is exiting");}
}
结果
总结
通过一个共享变量类来完成变量共享
通过共享变量来协调thread之间的关系