1.通过继续修改ThreadPoolExectutor可以自定义自己的执行类
2.ThreadPoolExecutor executors = new ThreadPoolExecutor(size, size, 10, TimeUnit.SECONDS, new PriorityBlockingQueue());
通过使任务实现runnable和comparable,在任务队列忙得时候,可以实现任务执行的排序。
3.利用threadFactory接口,生成自己的类
/**
*
*/
package thread.threadfactory;
import java.util.Date;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;
/**
* @author Administrator
*
*/
public class MyThreadFactory implements ThreadFactory {
private String prefix;
private int count;
/**
* @param prefix
* @param count
*/
public MyThreadFactory(String prefix) {
this.prefix = prefix;
this.count = 1;
}
/* (non-Javadoc)
* @see java.util.concurrent.ThreadFactory#newThread(java.lang.Runnable)
*/
public Thread newThread(Runnable r) {
MyThread thread = new MyThread(r, prefix+"-"+count);
this.count++;
return thread;
}
private class MyThread extends Thread{
private Date createdDate;
private Date startDate;
private Date finishDate;
public MyThread(Runnable r,String name){
super(r, name);
setCreateDate();
}
/* (non-Javadoc)
* @see java.lang.Thread#run()
*/
@Override
public void run() {
setStartDate();
super.run();
setFinishDate();
}
public void setStartDate(){
this.startDate = new Date();
}
public void setFinishDate(){
this.finishDate = new Date();
}
public void setCreateDate(){
this.createdDate = new Date();
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "MyThread [createdDate=" + createdDate + ", startDate="
+ startDate + ", finishDate=" + finishDate + "]";
}
}
public static void main(String[] args) {
MyThreadFactory factory = new MyThreadFactory("sss");
Thread newThread = factory.newThread(new Runnable() {
public void run() {
System.out.println("执行XXXX");
try {
TimeUnit.SECONDS.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
newThread.start();
try {
newThread.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(!newThread.isAlive()){
System.out.println(newThread.toString());
}
}
}
/**
*
*/
package thread.threadfactory;
import java.util.Date;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;
/**
* @author Administrator
*
*/
public class MyThreadFactory implements ThreadFactory {
private String prefix;
private int count;
/**
* @param prefix
* @param count
*/
public MyThreadFactory(String prefix) {
this.prefix = prefix;
this.count = 1;
}
/* (non-Javadoc)
* @see java.util.concurrent.ThreadFactory#newThread(java.lang.Runnable)
*/
public Thread newThread(Runnable r) {
MyThread thread = new MyThread(r, prefix+"-"+count);
this.count++;
return thread;
}
private class MyThread extends Thread{
private Date createdDate;
private Date startDate;
private Date finishDate;
public MyThread(Runnable r,String name){
super(r, name);
setCreateDate();
}
/* (non-Javadoc)
* @see java.lang.Thread#run()
*/
@Override
public void run() {
setStartDate();
super.run();
setFinishDate();
}
public void setStartDate(){
this.startDate = new Date();
}
public void setFinishDate(){
this.finishDate = new Date();
}
public void setCreateDate(){
this.createdDate = new Date();
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "MyThread [createdDate=" + createdDate + ", startDate="
+ startDate + ", finishDate=" + finishDate + "]";
}
}
public static void main(String[] args) {
/*MyThreadFactory factory = new MyThreadFactory("sss");
Thread newThread = factory.newThread(new Runnable() {
public void run() {
System.out.println("执行XXXX");
try {
TimeUnit.SECONDS.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
newThread.start();
try {
newThread.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(!newThread.isAlive()){
System.out.println(newThread.toString());
}*/
MyThreadFactory factory = new MyThreadFactory("MyThreadFactory");
ExecutorService newCachedThreadPool = Executors.newCachedThreadPool(factory);
newCachedThreadPool.submit(new Runnable() {
public void run() {
System.out.println("执行XXXX");
try {
TimeUnit.SECONDS.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
newCachedThreadPool.shutdown();
try {
boolean awaitTermination = newCachedThreadPool.awaitTermination(10, TimeUnit.SECONDS);
if(awaitTermination){
System.out.println("任务结束");
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}