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 CallabelTest2 {
Integer num = 10;
static Integer n = 10;
public static void main(String[] args) {
CallabelTest2 call = new CallabelTest2();
call.t1();
//t();
}
public static void t() {
//根据CPU核数来创建线程数量,CPU密集型是N+1,I/O密集型是2N+1
//ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
ExecutorService executorService = Executors.newFixedThreadPool(3);
System.out.println(Runtime.getRuntime().availableProcessors());
//使用Future来获取覆写Callable的call方法的任务返回结果
List<Future<String>> futureList = new ArrayList<>();
for(int i=0;i<3;i++) {
Callable<String> callable = () ->{
/*if(num>0) {
System.out.println(Thread.currentThread().getName()+"当前num是"+num);
num = num-1;
System.out.println(Thread.currentThread().getName()+"剩下"+num);
Thread.sleep(1);
}else {
System.out.println(Thread.currentThread().getName()+"num的值是"+num);
}*/
while(n>0) {
if(n>0) {
System.out.println(Thread.currentThread().getName()+"当前n是"+n);
n = n-1;
System.out.println(Thread.currentThread().getName()+"剩下"+n);
Thread.sleep(1);
}else {
System.out.println(Thread.currentThread().getName()+"n的值是"+n);
}
}
return Thread.currentThread().getName();
};
Future<String> future = executorService.submit(callable);
}
/*for(int i=0;i<futureList.size();i++) {
try {
System.out.println(futureList.get(i).get());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}*/
for(Future<String> f:futureList) {
try {
System.out.println(f.get());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void t1() {
//根据CPU核数来创建线程数量,CPU密集型是N+1,I/O密集型是2N+1
//ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
ExecutorService executorService = Executors.newFixedThreadPool(2);
System.out.println(Runtime.getRuntime().availableProcessors());
//使用Future来获取覆写Callable的call方法的任务返回结果
List<Future<String>> futureList = new ArrayList<>();
for(int i=0;i<3;i++) {
Callable<String> callable = () ->{
/*if(num>0) {
System.out.println(Thread.currentThread().getName()+"当前num是"+num);
num = num-1;
System.out.println(Thread.currentThread().getName()+"剩下"+num);
Thread.sleep(1);
}else {
System.out.println(Thread.currentThread().getName()+"num的值是"+num);
}*/
while(num>0) {
if(num>0) {
System.out.println(Thread.currentThread().getName()+"当前num是"+num);
num = num-1;
System.out.println(Thread.currentThread().getName()+"剩下"+num);
Thread.sleep(1);
}else {
System.out.println(Thread.currentThread().getName()+"num的值是"+num);
}
}
return Thread.currentThread().getName();
};
Future<String> future = executorService.submit(callable);
}
/*for(int i=0;i<futureList.size();i++) {
try {
System.out.println(futureList.get(i).get());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}*/
for(Future<String> f:futureList) {
try {
System.out.println(f.get());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}