java线程执行器
2016-06-19 21:35
357 查看
java 执行器分离了任务的创建和执行,通过Runnable接口,只需要将对像交给执行器来执行即可。而不需要自己手动去创建Thread对象。执行器通过创建所需的线程,来负责Runnbale的创建,实例化以及运行。同时,执行器通过线程池来管理线程。大大提高了系统的性能。避免由于不断的创建以及销毁线程所带来的系统开销。下面是本人写的一个关于线程执行器的小示例:
首先创建一个Task类:实现被web服务器执行的任务。
还有一个服务器类。
Main类:
首先创建一个Task类:实现被web服务器执行的任务。
package com.java.thread.exccutor; import java.util.Date; import java.util.concurrent.TimeUnit; public class Task implements Runnable{ private Date initDate;//声明私有化变量,存储任务创建的时间 private String name;//任务名称 public Task(String name){ initDate = new Date(); this.name = name; } public void run() { //获取当前任务创建的时间 System.out.printf("%s:Task %s:Created on :%s \n", Thread.currentThread().getName(),name,initDate); //获取当前任务开始时间 System.out.printf("%s:Task %s:Started on:%s\n",Thread.currentThread().getName(),name,new Date()); Long duration =(long)(Math.random()*10); try { System.out.printf("%s:Task %s:Doing a tasking during %d seconds\n", Thread.currentThread().getName(),name,duration); TimeUnit.SECONDS.sleep(duration);//线程休眠一段时间 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
还有一个服务器类。
package com.java.thread.exccutor; import java.util.concurrent.Executors; import java.util.concurrent.ThreadPoolExecutor; public class Server {// 执行通过执行器收到的任务 private ThreadPoolExecutor executor; public Server(){ //通过Executor类来初始化ThreadpoolExecutor对象 executor =(ThreadPoolExecutor) Executors.newCachedThreadPool(); } public void executeTask(Task task){ System.out.print("Server:A new Task has Arrived\n "); executor.execute(task); System.out.printf("Server:executor's pool Size %d\n",executor.getPoolSize());//返回线程池中实际线程的数量 System.out.printf("Server:Active count:%d\n",executor.getActiveCount()); //返回执行器中正在执行的线程数 System.out.printf("Server:Completed Task:%d\n,",executor.getCompletedTaskCount()); 返回执行器已经执行的线程数 } public void endServer(){ executor.shutdown(); } }
Main类:
package com.java.thread.exccutor; public class Main { public static void main(String[] args) { Server server = new Server(); for(int i=0;i<5;i++){ Task task = new Task("Task"+i); server.executeTask(task); } server.endServer(); } }
相关文章推荐
- java 代码生成器相关代码
- 20145324Java课程总结
- java学习,第一天
- spring--bean 标签的一些属性的配置
- struts关于result知识
- 《Thinkinginjava》第5章-初始化与清理
- 浅析Spring AOP
- 拦截器与过滤器的区别
- spring security 的 logout 功能
- 20145118 《Java程序设计》课程总结
- List集合与Array数组之间的互相转换
- Java学习笔记
- jdk和jre的区别
- 百度地图 5.0手机报错java.lang.UnsatisfiedLinkError: No implementation found for int
- Activiti(二)流程实例
- Rxjava四步走到高级掌握
- Java的平台独立性
- JavaWeb之Filter(过滤器)
- Spring Session管理
- 《Java虚拟机原理图解(一)》JVM运行时数据区