zoukankan      html  css  js  c++  java
  • 线程池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++;
                }
                
                
    
            }
            
        }
    
    }
  • 相关阅读:
    (转) tcp的注册端口
    [转] Android中C&C++源码库的初步研究
    (转)vim7.3中文乱码解决方法
    {转} Eclipse 高亮显示选中的相同变量
    libcurl 一个实现了client请求http,ftp的库
    c#操作文件夹
    OutputCache祥解
    非静态的字段、方法或属性“System.Web.UI.Page.ClientScript.get”要求对象引用
    IXMLDOMDocument 成員
    关于中日文和UNICODE之间编码的转换(2008725 15:05:00)
  • 原文地址:https://www.cnblogs.com/jinzhiming/p/9133974.html
Copyright © 2011-2022 走看看