美文网首页
thread pool

thread pool

作者: 博瑜 | 来源:发表于2017-07-22 20:16 被阅读0次
    //callable  和  runnable的区别:
    //runnable 的run方法不会有任何返回结果。所以祝线程无法获得任务线程的返回值
    //callable的call方法可以返回结果,但是主线程在获取时是被阻塞的,需要等待任务线程返回才能拿到结果。
    
    package threadimp;
    
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    public class MyThreadCachePool {
    public static void main(String[] args) {
        ExecutorService pool = Executors.newCachedThreadPool();
        for (int i = 0; i < 5; i++) {
            pool.execute(new Runnable() {
                @Override
                public void run() {
                    System.out.println(Thread.currentThread().getName() + " start");
                    try {
                        Thread.sleep(5000);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            });
        }
        pool.shutdown();
    }
    }
    
    
    
    
    
    package threadimp;
    
    import java.util.concurrent.Callable;
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.Future;
    
    public class MyThreadFixPoolCallable {
    public static void main(String[] args) {
        ExecutorService pool = Executors.newFixedThreadPool(4);
        for (int i = 0; i < 8; i++) {
            Future<String> result = pool.submit(new Callable<String>() {
                @Override
                public String call() {
                    System.out.println(Thread.currentThread().getName() + " start");
                    try {
                        Thread.sleep(5000);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    return Thread.currentThread().getName();
                }
            });
        try {
            System.out.println(result.get());
        } catch (InterruptedException | ExecutionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        }
        pool.shutdown();
    }
    }
    //result.get() 会阻塞!!!
    
    
    
    
    
    
    
    
    package threadimp;
    
    import java.util.ArrayList;
    import java.util.Random;
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.Future;
    
    public class TaskPool {
    public static void main(String[] args) {
    Future<?> submit = null;
    Random random = new Random();
    ExecutorService exec = Executors.newFixedThreadPool(4);
    ArrayList<Future<?>> results = new ArrayList<>();
    for (int i = 0; i < 10; i++) {
        submit = exec.submit(new TaskCallable(i));
        results.add(submit);
    }
    for (Future f: results) {
        boolean done = f.isDone();
        System.out.println(done);
        try {
            System.out.println("result  " + f.get());
        } catch (InterruptedException | ExecutionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    }
    }
    
    
    
    
    
    package threadimp;
    
    import java.util.Random;
    import java.util.concurrent.Callable;
    
    public class TaskCallable implements Callable<String> {
    private int s;
    Random r = new Random();
    public TaskCallable(int s) {
        this.s = s;
    }
    
    @Override
    public String call() {
        int rand = r.nextInt(3);
        String name = Thread.currentThread().getName();
        System.out.println(name + " start");
        try {
            Thread.sleep(rand * 1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return name + " " + s;
    }
    
    }

    相关文章

      网友评论

          本文标题:thread pool

          本文链接:https://www.haomeiwen.com/subject/ayoukxtx.html