Java 线程池(一)
1.串行的执行任务
如: class singleThread
{
public static void main(String[] args) throws IOException
{
ServerSocket socket = new ServerSocket(80);
while(true)
{
Socket connect = socket .accept();
//执行方法
handleRequest(connect);
}
}
}
并行执行任务
如:
class concurrentThread
{
public static void main(String[] args) throws IOException
{
ServerSocket socket = new ServerSocket(80);
while(true)
{
final Socket connect = socket .accept();
//执行方法
Runnable task = new Runnable()
{
public void run()
{
handleRequest(connect);
}
}
new Thread(task).start();
}
}
}
串行和并行的区别:
a. 任务处理过程从主线程中分离出来,使得主循环能够更快得重新等待下一个到来的连接
b. 任务可以并行处理,可以同时处理服务多个请求。
2.Executor 框架
每当看到下面这种形式的代码时:
new Thread(runnable).start()
并且你希望获得一种更灵活的执行策略时,请考虑用Executor代替Thread
线程池是指管理一组同构工作线程的资源池
在线程池中执行任务比“为每个任务分配一个线程”的优势:
a 重用现有的线程,而不是创建新线程,可以在处理多个请求时分摊在线程创建和销毁过程中产生的巨大开销
b 当请求到达时,工作线程已经存在,不会由于等待创建线程而延迟任务的执行
为了解决执行任务的生命周期问题,Executor扩展了ExecutorService接口,提供生命周期的管理方法
ExecutorService的生命周期由3种状态:运行、关闭和已终止
1.串行的执行任务
如: class singleThread
{
public static void main(String[] args) throws IOException
{
ServerSocket socket = new ServerSocket(80);
while(true)
{
Socket connect = socket .accept();
//执行方法
handleRequest(connect);
}
}
}
并行执行任务
如:
class concurrentThread
{
public static void main(String[] args) throws IOException
{
ServerSocket socket = new ServerSocket(80);
while(true)
{
final Socket connect = socket .accept();
//执行方法
Runnable task = new Runnable()
{
public void run()
{
handleRequest(connect);
}
}
new Thread(task).start();
}
}
}
串行和并行的区别:
a. 任务处理过程从主线程中分离出来,使得主循环能够更快得重新等待下一个到来的连接
b. 任务可以并行处理,可以同时处理服务多个请求。
2.Executor 框架
每当看到下面这种形式的代码时:
new Thread(runnable).start()
并且你希望获得一种更灵活的执行策略时,请考虑用Executor代替Thread
线程池是指管理一组同构工作线程的资源池
在线程池中执行任务比“为每个任务分配一个线程”的优势:
a 重用现有的线程,而不是创建新线程,可以在处理多个请求时分摊在线程创建和销毁过程中产生的巨大开销
b 当请求到达时,工作线程已经存在,不会由于等待创建线程而延迟任务的执行
为了解决执行任务的生命周期问题,Executor扩展了ExecutorService接口,提供生命周期的管理方法
ExecutorService的生命周期由3种状态:运行、关闭和已终止