• 线程池demo


    package test;
    
    import java.util.ArrayList;
    import java.util.List;
    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 Test1 {
        public static void main(String[] args) {
            test2();
        }
        
        public static void test1(){
            int count = Runtime.getRuntime().availableProcessors();
            ExecutorService service = Executors.newFixedThreadPool(count);
            
            A a = new A();
            
            try {
                for(int i = 0;i<count;i++){
                    service.execute(a);
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally{
                if(!service.isShutdown()){
                    service.shutdown();
                }
            }
        }
        
        public static void test2(){
            int count = Runtime.getRuntime().availableProcessors();
            ExecutorService service = Executors.newFixedThreadPool(count);
            
            B b = new B();
            
            List<Future<String>> list = new ArrayList<Future<String>>();
            try {
                for(int i = 0;i<count;i++){
                    Future<String> f = service.submit(b);
                    list.add(f);
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally{
                if(!service.isShutdown()){
                    service.shutdown();
                }
            }
            
            try {
                String a = list.get(0).get();
                System.out.println("a:"+a);
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (ExecutionException e) {
                e.printStackTrace();
            }
            
            System.out.println("next");
            
            
        }
    }
    
    
    class B implements Callable<String>{
    
        @Override
        public String call() throws Exception {
            String a = "call";
            Thread.sleep(10000);
            System.out.println(a);
            return a;
        }
    
    
        
    }
    class A implements Runnable {
        private int ticketNum = 1;
        private Object o = new Object();
        
        @Override
        public void run() {
            
            while(true){
                
                synchronized (o) {
                    if(ticketNum>500000){
                        break;
                    }
                    
                    System.out.println(Thread.currentThread().getName()+"出售了第"+ticketNum+"张票");
                    
                    ticketNum++;
                }
                
                
    
            }
            
        }
    
    }
  • 相关阅读:
    Single Image Haze Removal Using Dark Channel Prior翻译
    android的单元测试
    HTML&JS笔记(1)
    动手学Javascript(1)——PopStar
    Cocos2d-x教程第(11)讲-利用遮罩(蒙版)CCLayerColor制作新手引导界面(上)
    硬币翻转倍数递增试算
    java泛型接口详解
    1352
    大话设计模式之——简单工厂模式
    iOS自适应行高方法及问题
  • 原文地址:https://www.cnblogs.com/jinzhiming/p/9133974.html
Copyright © 2020-2023  润新知