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++; } } } }