多執行緒測試程式碼 阿新 • • 發佈:2018-11-14 package com.yy.read;import java.util.HashSet;import java.util.List;import java.util.Random;import java.util.Set;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 Test { //開啟10個執行緒 執行static ExecutorService es =Executors.newFixedThreadPool(6);public static void main(String[] args) throws Exception { //併發請求1 new Thread(new Runnable() { @Override public void run() { try { dobussiness("A","B"); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }).start(); //併發請求2 new Thread(new Runnable() { @Override public void run() { try { dobussiness("C","D"); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }).start(); //併發請求3 new Thread(new Runnable() { @Override public void run() { try { dobussiness("E","F"); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }).start(); }private static void dobussiness(String taskAName,String taskBName) throws InterruptedException, ExecutionException { //同步多執行緒 Callable<String> taskA= getnewCallable(taskAName); Callable<String> taskB = getnewCallable(taskBName); Set<Callable<String>> tasks = new HashSet<>(); tasks.add(taskA); tasks.add(taskB); //執行所有的callable List<Future<String>> list=es.invokeAll(tasks); for (Future<String> future : list) { if(!future.isDone()) throw new RuntimeException(future.get()+"尚未完成"); System.out.println("處理結果:"+future.get()); }} public static Callable<String> getnewCallable(String taskName) { return new Callable<String>() { @Override public String call() throws Exception { System.out.println(Thread.currentThread().getName() + "執行任務"+taskName); int i = new Random().nextInt(10) ; System.out.println("處理["+i+"]秒"); Thread.currentThread().sleep(i* 1000); System.out.println("處理["+i+"]秒結束"); return Thread.currentThread().getName(); } }; }}