zoukankan      html  css  js  c++  java
  • 利用多线程进行多核计算

      1、利用多线程进行多核计算,利用多核计算提升计算性能。

      2、通过CountDownLatch countDownLatch = new CountDownLatch(threadSize);来将多个计算线程结果返回给

       主线程进行合并。

      3、通过单例来生产固定大小线程池

    private static Logger logger = LoggerFactory.getLogger(ThreadTool.class);
    private static ThreadTool threadTool;
    private ExecutorService executorService;

    private ThreadTool(){
    NamedThreadFactory threadFactory = new NamedThreadFactory("Gbdt-Thread-", true);
    RejectedExecutionHandler handler = new RejectedExecutionHandler() {
    private int i = 1;
    @Override
    public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
    if (i++ % 7 == 0) {
    i = 1;
    logger.warn("[Gbdt-23002]Task:{} has been reject for ThreadPool exhausted!" +
    " pool:{}, active:{}, queue:{}, taskcnt: {}",
    new Object[]{
    r,
    executor.getPoolSize(),
    executor.getActiveCount(),
    executor.getQueue().size(),
    executor.getTaskCount()
    });
    }
    throw new RejectedExecutionException("[Gbdt-23003]Gbdt thread pool of provider has bean exhausted");
    }
    };

    executorService = new ThreadPoolExecutor(20, 500,
    60, TimeUnit.MILLISECONDS,
    new LinkedBlockingQueue<Runnable>(), threadFactory, handler);

    }

    public static ThreadTool getInstance(){
    synchronized (ThreadTool.class) {
    if (threadTool == null) { //Double Checked
    threadTool = new ThreadTool();
    }
    }
    return threadTool;
    }


    public ExecutorService getExecutorService(){
    return executorService;
    }

      4、获得线程池并将任务线程添加到线程中。

    ExecutorService executorService= threadTool.getExecutorService();
    executorService.execute(thread);

      5、线程将执行完后将

    // 倒数器减1
    countDownLatch.countDown();

      6、countDownLatch设置等待时间countDownLatch减到0或超时则返回。

    try
    {
    // 阻塞当前线程,直到倒数计数器倒数到0
    countDownLatch.await(200, TimeUnit.MILLISECONDS);
    }
    catch (InterruptedException e)
    {
    log.error("线程计算异常:"+e.getMessage(),e);
    }

  • 相关阅读:
    eclipse internal web browser 不可用在linux下的解决
    Asp.Net MVC4入门指南(10):第三方控件Studio for ASP.NET Wijmo MVC4 工具应用
    生成树计数MatrixTree定理
    strcpy与strncpy
    [置顶] 游戏开发技术总结(经典之作)第七集 广阔天地游戏大地图的形成方法的地图移动
    Inside COM接口
    UTC时区表(.Net)
    java练习
    如果Imageview与Linearlayout有叠加且可选资源长度不同,如何布局?
    【Android测试】Android抓包解析全过程
  • 原文地址:https://www.cnblogs.com/freedommovie/p/7155260.html
Copyright © 2011-2022 走看看