测试并发编程demo

来源:互联网 发布:java商城系统开发 编辑:程序博客网 时间:2024/05/29 21:31

package cn.com;

import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.Future;
import java.util.concurrent.RecursiveTask;
import java.util.concurrent.atomic.LongAdder;

import org.junit.Before;
import org.junit.Test;

public class FileTest {

ExecutorService newFixedThreadPool;ForkJoinPool fjp;@Beforepublic void initalMethod() {    int nThreads = Runtime.getRuntime().availableProcessors();    this.newFixedThreadPool = Executors.newFixedThreadPool(nThreads);    fjp = new ForkJoinPool();}/** * 测试提交多个带有返回值的任务 * @throws FileNotFoundException * @throws InterruptedException * @throws ExecutionException */@Testpublic void testFile1() throws FileNotFoundException, InterruptedException, ExecutionException {    // 添加任务    List<Mytasks> tasks = new ArrayList<Mytasks>();    tasks.add(new Mytasks());    tasks.add(new Mytasks());    tasks.add(new Mytasks());    tasks.add(new Mytasks());    tasks.add(new Mytasks());    List<Future<Long>> res = newFixedThreadPool.invokeAll(tasks);    LongAdder la = new LongAdder();    for (int i = 0, size = res.size(); i < size; i++) {        la.add(res.get(i).get());    }    System.out.println(la.sum());}

}

class Mytasks implements Callable {

LongAdder la = new LongAdder();@Overridepublic Long call() throws Exception {    for (int i = 0; i < 999999; i++) {        la.increment();    }    return la.sum();}

}

class MyTasksB extends RecursiveTask {

private static final long serialVersionUID = 1L;ConcurrentLinkedQueue<Integer> clq;public MyTasksB(ConcurrentLinkedQueue<Integer> clq) {    super();    this.clq = clq;}@Overrideprotected Integer compute() {    if (clq.size() > 10000) {        MyTasksB forkJob = new MyTasksB(clq);        forkJob.fork();    }    return null;}

}

0 0