线程池、时间片线程

下面的代码说明的是线程池中的方法的实现的方式

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



posted @   diligently  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示