自制单机多线程查询器

程序如下:

/**
 * Java线程:多线程查询
 *
 * @author zaixing 2012-02-28 00:00:00
 */
public class Test2 {
public static boolean hit = false;
public static ExecutorService threadPool;
public static void main(String[] args) throws InterruptedException {


ExecutorService threadPool = Executors.newFixedThreadPool(3);
CountDownLatch cb = new CountDownLatch(10);
// 创建障碍器,并设置MainTask为所有定数量的线程都达到障碍点时候所要执行的任务(Runnable)
// CyclicBarrier cb = new CyclicBarrier(7, new MainTask());
int num = 10;
for(int i = 0;i < num;i++){
threadPool.execute(new SubTask(new Integer(i).toString(), cb));
}
threadPool.shutdown();
try {
cb.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("cb.await() 通过");
threadPool.shutdownNow();
System.out.println("shutdownNow() 通过");
System.out.println(Test2.hit);
}
}


/**
 * 查询任务
 */
class SubTask extends Thread {
private String name;
private CountDownLatch cb;


SubTask(String name, CountDownLatch cb) {
this.name = name;
this.cb = cb;
}


public void run() {
System.out.println("[子任务" + name + "]开始执行了!");
// 模拟耗时的任务
if(!"0".equals(name)){
for(int i = 0;i < 1000000000; i++);
}
System.out.println("[子任务" + name + "]开始执行完成了,并通知障碍器已经完成!");
try {
// 通知障碍器已经完成
if("0".equals(name)){
for(int i = 0;i < cb.getCount();i++){
Test2.hit = true;
cb.countDown();
}
}else{
cb.countDown();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

解释一下:本程序旨在完成在单机环境下,采用多线程技术进行查询,以便提高查询速度。注意:“for(int i = 0;i < num;i++){...}”这段程序完全可以替换成读文件然后分成几份让多线程去查询。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值