黑马程序员技术交流社区

标题: 关于控制某个线程最后结束 [打印本页]

作者: bingyu    时间: 2015-6-23 21:58
标题: 关于控制某个线程最后结束
今天在书上看到一个题目:编写10个线程,第一个从1加到10,第二个从11加到20......第10个从91加到100.最后再把10个线程的结果相加.
跪求更合理的方法,感觉自己这个新人写的代码好丑,

附代码(静态成员变量设置成public是为了方便,懒得写set get方法,不要在意这些细节:loveliness:):

  1. class Sum implements Runnable {

  2.         private int start;
  3.         private int end;
  4.         public int sum = 0; // 每个对象的数值累加最终的和
  5.         public static int count = 0; // 计数器
  6.         private static Object obj = new Object(); // 锁

  7.         // 构造方法,初始化加法的开始和结束的值
  8.         Sum(int start, int end) {
  9.                 // TODO Auto-generated constructor stub
  10.                 this.start = start;
  11.                 this.end = end;
  12.         }

  13.         // 线程方法
  14.         public void run() {
  15.                 for (int i = this.start; i <= this.end; i++) {
  16.                         synchronized (obj) {
  17.                                 this.sum = this.sum + i;
  18.                                 count++;
  19.                                 System.out.println(Thread.currentThread().getName() + "..."
  20.                                                 + sum);
  21.                         }
  22.                 }
  23.         }

  24. }

  25. public class SumThreadTest {

  26.         public static void main(String[] args) {
  27.                 // TODO Auto-generated method stub
  28.                 Sum s1 = new Sum(1, 10);
  29.                 Sum s2 = new Sum(11, 20);
  30.                 Sum s3 = new Sum(21, 30);
  31.                 Sum s4 = new Sum(31, 40);
  32.                 Sum s5 = new Sum(41, 50);
  33.                 Sum s6 = new Sum(51, 60);
  34.                 Sum s7 = new Sum(61, 70);
  35.                 Sum s8 = new Sum(71, 80);
  36.                 Sum s9 = new Sum(81, 90);
  37.                 Sum s10 = new Sum(91, 100);

  38.                 new Thread(s1).start();
  39.                 new Thread(s2).start();
  40.                 new Thread(s3).start();
  41.                 new Thread(s4).start();
  42.                 new Thread(s5).start();
  43.                 new Thread(s6).start();
  44.                 new Thread(s7).start();
  45.                 new Thread(s8).start();
  46.                 new Thread(s9).start();
  47.                 new Thread(s10).start();

  48.                 // 用while(true) +计数器count保证主线程最后结束
  49.                 while (true) {

  50.                         if (Sum.count == 100) {
  51.                                 int sum = s1.sum + s2.sum + s3.sum + s4.sum + s5.sum + s6.sum
  52.                                                 + s7.sum + s8.sum + s9.sum + s10.sum;
  53.                                 System.out.println(".........." + sum);
  54.                                 break;

  55.                         }
  56.                 }
  57.         }
  58. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2