Java多线程一般用法

来源:互联网 发布:用ps做淘宝主图 编辑:程序博客网 时间:2024/06/03 18:15

1.背景

如果开发并发处理的程序,就需要使用到线程池。

2.具体

2.1 说明

一般情况下,使用线程池,需要抽象一些概念来进行划分类,具体包括三个部分:
1.线程池服务(线程大小,队列大小(缓冲用),线程生命时长,饱和策略,当然还有便于识别的线程名)
2.执行器(实现了Runnable接口)
3.任务(即Task对象)

2.2 实例

import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.util.concurrent.*;import java.util.concurrent.atomic.AtomicInteger;/** * Created by Administrator on 2017/8/17. */public class MyThreadpool {    private static Logger logger = LoggerFactory.getLogger(MyThreadpool.class);    public static void test0() {        ExecutorService executorService = createExecutorService();        for (int i = 0; i < 10; i++) {            executorService.submit(new MyExecutor0(new Task0()));        }        try {            executorService.awaitTermination(10, TimeUnit.MINUTES);        } catch (InterruptedException e) {            logger.error("", e);        }    }    /**     * Thread Pool Service     * @return     */    public static ExecutorService createExecutorService() {        ThreadFactory threadFactory = new ThreadFactory() {            AtomicInteger atomicInteger = new AtomicInteger(0);            public Thread newThread(Runnable r) {                return new Thread(r,                        "给线程池起个好名字-" + atomicInteger.getAndIncrement());            }        };        int corePoolSize = 1;        int maximumPoolSize = 10;        long keepAliveTime = 10;        TimeUnit unit = TimeUnit.MINUTES;        BlockingQueue<Runnable> workQueue = new ArrayBlockingQueue(1);        ExecutorService executorService = new ThreadPoolExecutor(corePoolSize,                maximumPoolSize,                keepAliveTime,                unit,                workQueue, threadFactory);        return executorService;    }    /**     * Executor     */    public static class MyExecutor0 implements Runnable {        public Task0 task0;        public MyExecutor0(Task0 task0) {            this.task0 = task0;        }        @Override        public void run() {        }    }    /**     * Task     */    public static class Task0 {        public void doSomethting() {            //TODO 业务处理        }    }}
原创粉丝点击