设为首页 加入收藏

TOP

Java并发操作——基本的线程机制(二)
2014-11-23 19:56:38 来源: 作者: 【 】 浏览:37
Tags:Java 并发 操作 基本 线程 机制
}


}




import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;


/**
* CachedThreadPool
*/
public class ThreadTestWithExecutor {



private static final int count = 5;

/**
* @param args
*/
public static void main(String[] args) {

ExecutorService exec = Executors.newCachedThreadPool();
for(int i=0;i exec.execute(new LiftOff());
}
exec.shutdown();



//3.使用FixThreadPool
ExecutorService exec2 = Executors.newFixedThreadPool(3);
for(int i=0;i exec2.execute(new LiftOff());
}
exec2.shutdown();


//4.SingleThreadExecutor
ExecutorService exec3 = Executors.newSingleThreadExecutor();
for(int i=0;i exec3.execute(new LiftOff());
}
exec.shutdown();
System.out.println("执行完毕!");


}


}



这几段代码,都很简单,但是有几点需要说明


1)shutdown()方法的调用可以防止新任务被提交给这个Executor,当前线程(在上述代码中就是驱动main()的线程)将继续运行在shutdown()被调用之前提交的所有任务。


换句说,虽然是shutdown了,但是当前在执行器中的线程仍然会继续执行。


2)FixedThreadPool可以一次性预先执行代价高昂的线程分配(因而就可以限制线程的数量了)。这样会节省时间,因为你不用为每个任务都固定的付出创建线程的时间(记住,虽然每次new了一个Runnable对象,但是并不是每个Runnable对象都会new一次Thread.),直接从线程池中取线程即可。 但是,我们一定要记住一点,在任何线程池中,现有线程在可能的情况下, 都会被复用。


3)SingleThreadExecutor就像是线程数量为1的FixedThreadPool。这时候如果向其提交了多个任务,这些任务就会排队。每个任务都会在下一个任务开始之前运行结束。所有的任务将使用相同的线程。


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux下线程调试 ulimit core 下一篇PHP常用函数集锦

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: