线程池、时间片线程
下面的代码说明的是线程池中的方法的实现的方式
package lt.test01;
import java.util.Random;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class DemoThreadPool {
public static void main(String[] args){
//ExecutorService es = Executors.newFixedThreadPool(5);//一池5线程
ExecutorService es = Executors.newCachedThreadPool();//自动创建所需要的线程池
//ExecutorService es = Executors.newSingleThreadExecutor();
Future<Integer> result = null;
try {
for (int i = 1; i <= 20000; i++) {
result = es.submit(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
Thread.sleep(20);
System.out.print(Thread.currentThread().getName()+"\t\n");
return new Random().nextInt(5);
}
});
System.out.print("当前的使用次数是:"+i+"\n");
}
}catch (Exception e){
e.printStackTrace();
}finally {
es.shutdown();
}
}
}
下面的代码说名的是实现的是线程的时间化的管理
package lt.test01;
import java.util.Random;
import java.util.concurrent.*;
public class PoolThreadTest1 {
public static void main(String[] args){
ScheduledExecutorService service = Executors.newScheduledThreadPool(5);
ScheduledFuture<Integer> result = null;
try {
for (int i = 1; i <= 20 ; i++) {
/**
* 需要注意的地方是
* 实现的callable的接口
* 然后接口中的类型和上面的类型要定义的一致
* 要不然会产生错误
*/
result = service.schedule(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
System.out.print(Thread.currentThread().getName()+"\t\n");
return new Random().nextInt(5);
}
},2,TimeUnit.SECONDS);
System.out.print("*** \t"+result+"\n");
}
}catch (Exception e){
e.printStackTrace();
}finally {
service.shutdown();
}
}
}
本文来自博客园,作者:diligently,转载请注明原文链接:https://www.cnblogs.com/luo12828-foxmail/p/16964149.html

浙公网安备 33010602011771号