多线程进阶001 之 在线程中执行任务
来源:互联网 发布:js 二维数组遍历 编辑:程序博客网 时间:2024/04/28 11:13
当围绕”任务执行” 来设计应用程序结构时,第一步就是要找出清晰的任务边界.在理想情况下,各个任务之间是相互独立的.
大多数服务器应用程序都提供了一种自然的任务边界选择方式: 以独立的客户请求为边界.
串行的执行任务
在应用程序中可以通过多种策略来调度任务,而其中一些策略能够更好地利用潜在的并发性.最简单的策略就是在单个线程中串行的执行各项任务.
import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class SingleThreadWebServer { public static void main(String[] args) throws IOException { @SuppressWarnings("resource") ServerSocket socket = new ServerSocket(80); while(true){ Socket connection = socket.accept(); handleRequest(connection); } } private static void handleRequest(Socket connection) { //... }}
实际生成环境中,这样执行会非常糟糕,因为它每次只能处理一个请求.
显式地为任务创建线程
import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class ThreadPerTaskWebServer { public static void main(String[] args) throws IOException { @SuppressWarnings("resource") ServerSocket socket = new ServerSocket(80); while(true){ Socket connection = socket.accept(); new Thread(){ public void run() { handleRequest(connection); }; }.start(); } } private static void handleRequest(Socket connection) { //... }}
在正常负载的情况下,”为每一个任务分配一个线程” 的方法能提升串行执行性能.
表面上看起来,这种做法很好,在真实环境下,千万不要这样做.
缺陷有:
1. 线程生命周期的开销非常高
2. 活跃的线程导致资源消耗严重
3. 稳定性受限,操作系统和JVM对创建线程的个数有限制
4. 过多的线程,降低程序执行速度
阅读全文
0 0
- 多线程进阶001 之 在线程中执行任务
- 【java总结】多线程进阶篇之任务执行
- 在WEB程序中轻松执行计划任务(多线程)
- 在Web应用程序中执行计划任务(多线程)
- 在Web应用程序中执行计划任务(多线程)
- 在Web应用程序中执行计划任务(多线程)
- 在Web应用程序中执行计划任务(多线程)
- Asp.Net在Web应用程序中执行计划任务(多线程)
- 在Web应用程序中执行计划任务(多线程)
- 在Web应用程序中执行计划任务(多线程)
- 在Web应用程序中执行计划任务(多线程)
- 在Web应用程序中执行计划任务(多线程)
- 在Web应用程序中执行计划任务(多线程)
- 在Web应用程序中执行计划任务(多线程)
- 在Global中使用线程隔时执行一项任务
- 在Android UI线程中执行定时任务的方法
- 多线程中任务的执行
- Java多线程--任务执行(线程池)
- jQuery
- 第二十天:Servlet+mysql+html 增删改查 (代码)
- python学习零碎记二
- 移动端适配方案-锦囊
- Python中BufferedIOBase
- 多线程进阶001 之 在线程中执行任务
- 云笔记第一阶段总结
- (175)矢量表达式
- AC自动机
- IO流常用方法,流的用法,代码例子
- 第四周(2) 申请监督消息处理功能
- C++希尔排序
- github:前端代码在线演示方法
- 使用github实现共享代码的一些入门级教程