zoukankan      html  css  js  c++  java
  • 多线程

    import com.google.common.collect.Lists;
    
    import java.util.List;
    import java.util.concurrent.Callable;
    import java.util.concurrent.CountDownLatch;
    import java.util.concurrent.Future;
    import java.util.concurrent.LinkedBlockingDeque;
    import java.util.concurrent.ThreadPoolExecutor;
    import java.util.concurrent.TimeUnit;
    import java.util.concurrent.atomic.AtomicInteger;
    
    /**
     * @author shiqil.liu
     * @date 2019-08-21 14:26
     */
    public class Lotxc {
        static Integer w = 0;
        static AtomicInteger ww = new AtomicInteger(0);
        static CountDownLatch countDownLatch = new CountDownLatch(200000);
    
        public static void main(String[] args) {
            List<Mytask> list = Lists.newArrayList();
            for (int i = 0; i < 200000; i++) {
                list.add(new Mytask(w));
            }
    
    
            ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(4, 4, 3000, TimeUnit.MILLISECONDS, new LinkedBlockingDeque<>());
            try {
                List<Future<Integer>> futures = threadPoolExecutor.invokeAll(list);
                for (Future<Integer> f : futures) {
                    //System.out.println(f.get());
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            try {
                countDownLatch.await();
                System.out.println("最终的w是" + Lotxc.w);
                System.out.println("最终的w是" + Lotxc.ww);
    
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
    
    
        }
    
        /*class Mytask implements Callable<String> {
            String temp;
    
            Mytask(String s) {
                temp = s;
            }
    
            @Override
            public String call() throws Exception {
                System.out.println(temp);
                return temp+"1";
            }
        }*/
    }
    
    class Mytask implements Callable<Integer> {
        Integer temp;
    
        Mytask(Integer s) {
            temp = s;
        }
    
        static Object object = new Object();
    
        @Override
        public Integer call() throws Exception {
            Lotxc.ww.incrementAndGet();
            //synchronized (object) {
            Lotxc.w++;
            //}
            Lotxc.countDownLatch.countDown();
            return Lotxc.ww.incrementAndGet();
        }
    }
    import com.google.common.collect.Lists;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import java.util.ArrayList;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.Future;
    import java.util.concurrent.atomic.AtomicInteger;
    
    //阿里巴巴不让这么创建,还是用上一种吧
    public class Test {
        private static Logger logger = LoggerFactory.getLogger(Test.class);
        static AtomicInteger atomicInteger = new AtomicInteger(0);
        public static void main(String[] args) {
            ExecutorService executorService = Executors.newFixedThreadPool(4,r -> new Thread(r, "thread-" + atomicInteger.getAndIncrement()));
            ArrayList< Future<?>> list = Lists.newArrayList();
            for (int i = 0; i < 100; i++) {
                Future<?> submit = executorService.submit(() -> {
                    logger.info("abc");
                    return 13;
    
                });
                list.add(submit);
            }
    
    
            System.out.println("list的大小为:"+list.size());
            list.forEach(future -> {
                try {
                    future.get();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            });
    
        }
    
    
    
    
    }
    
    
     
  • 相关阅读:
    基本数据类型(二)
    jquery 基础
    CSS 基础
    Hyperledger Fabric Ordering Service过程
    Hyperledger Fabric Transaction Proposal过程
    Hyperledger Chaincode启动过程
    Hyperledger Fabric1.0 整体结构
    golang学习
    数字签名详解
    设置MongoDB课程环境
  • 原文地址:https://www.cnblogs.com/TheQi/p/11390727.html
Copyright © 2011-2022 走看看