[NKU]sweet @ Google && TopCoder && CodeForces

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  33 Posts :: 1 Stories :: 15 Comments :: 0 Trackbacks
原文: Java线程:新特征-障碍器,这是该作者的原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则他将追究法律责任……

Hmm……好怕怕,转个日志都会被追究法律责任……

不过要感谢原文的兰州,在兰州的文章帮助下,今天突然发现了灵感,改造了改造兰州的代码……
在ACM中的作用,我觉得可以这样:
1:对于单文件多case的题,开多线程,每个线程跑一个case,之后再调用收尾的任务输出
2:对于单case且可以并行的情况,开若干线程处理之后,调用收尾函数來最后处理、输出

以下是一个简单的求和代码,实际效果,在我的双核CPU上用时大概减少了一半

 1 import java.util.concurrent.BrokenBarrierException;
 2 import java.util.concurrent.CyclicBarrier;
 3 
 4 public class Test {
 5     public static int[] ans;
 6     void run() {
 7         ans = new int[4];
 8         int now = 0;
 9         for (int i = 0; i < 400000000; i++) {
10             now = (now + i) % 9999997;
11         }
12         System.out.println(now);
13         CyclicBarrier cb = new CyclicBarrier(4new MainTask());
14         new SubTask(0,0,100000000,cb).start();
15         new SubTask(1,100000000,200000000,cb).start();
16         new SubTask(2,200000000,300000000,cb).start();
17         new SubTask(3,300000000,400000000,cb).start();
18     }
19     public static void main(String[] args) {
20         new Test().run();
21     }
22 }
23 
24 class MainTask implements Runnable {
25     public void run() {
26         int ans = 0;
27         for (int i = 0; i < 4; i++) {
28             ans = (ans + Test.ans[i]) % 9999997;
29         }
30         System.out.println(ans);
31     }
32 }
33 
34 class SubTask extends Thread {
35     private int pos;
36     private int left;
37     private int right;
38     private CyclicBarrier cb;
39     final int mod = 9999997;
40 
41     SubTask(int pos,int left,int right,CyclicBarrier cb) {
42         this.pos = pos;
43         this.left = left;
44         this.right = right;
45         this.cb = cb;
46     }
47 
48     public void run() {
49         int ans = 0;
50         for (int i = left; i < right; i++) {
51             ans = (ans + i) % mod;
52         }
53         Test.ans[pos] = ans;
54 
55         try {
56             cb.await();
57         } catch (InterruptedException e) {
58             e.printStackTrace();
59         } catch (BrokenBarrierException e) {
60             e.printStackTrace();
61         }
62     }
63 }
posted on 2011-04-06 12:36 sweetsc 阅读(451) 评论(0)  编辑  收藏 所属分类: ACM/ICPC学习心得

只有注册用户登录后才能发表评论。


网站导航: