1. 程式人生 > >多執行緒測試程式碼

多執行緒測試程式碼

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();
}
};


}
}