JAVA 线程编程 ----什么时候多线程可能不好(When Multiple Threads Might Not Be Good)
2012-07-16 15:23
246 查看
设计程序时候创建更多的线程不总是一个好主意。线程不是免费的;它们会带来一些资源的负担。
每个Thread 对象初始化时需要使用内存资源。除了对象本身使用的内存外,JVM还会为每个线程分配两个执行调用堆栈(call stack)。一个堆栈用来跟踪Java方法的调用和局部变量。另一个堆栈用来跟踪本地代码(native code)(典型是C语言代码)的调用。
每个线程也需要处理器资源,也会给操作系统的线程调度增加负担。当某个线程的执行被挂起,离开了处理器,另一线程进入处理器,它的执行被恢复。这就是所谓的上下文切换(contex switch).CPU时钟需要用来做上下文切换,并且当有许多线程运行时,CPU时钟周期就变得相当可观了。
除此之外,还包括线程启动,停止和杀死一个线程对象。当线程用来完成一个简单的后台任务时,这个代价就需要认真考虑了。比如,设计一个email程序,它每隔5分钟来监测是否有新邮件。与其创建一个新线程每次来监测,还不如让同一个线程持续运行,然后在每次查询时,sleep 5分钟。
当设计系统时添加额外线程时,这些代价需要认真考虑。
每个Thread 对象初始化时需要使用内存资源。除了对象本身使用的内存外,JVM还会为每个线程分配两个执行调用堆栈(call stack)。一个堆栈用来跟踪Java方法的调用和局部变量。另一个堆栈用来跟踪本地代码(native code)(典型是C语言代码)的调用。
每个线程也需要处理器资源,也会给操作系统的线程调度增加负担。当某个线程的执行被挂起,离开了处理器,另一线程进入处理器,它的执行被恢复。这就是所谓的上下文切换(contex switch).CPU时钟需要用来做上下文切换,并且当有许多线程运行时,CPU时钟周期就变得相当可观了。
除此之外,还包括线程启动,停止和杀死一个线程对象。当线程用来完成一个简单的后台任务时,这个代价就需要认真考虑了。比如,设计一个email程序,它每隔5分钟来监测是否有新邮件。与其创建一个新线程每次来监测,还不如让同一个线程持续运行,然后在每次查询时,sleep 5分钟。
当设计系统时添加额外线程时,这些代价需要认真考虑。
相关文章推荐
- JAVA 线程编程 ----为什么要用多线程(Why Use Multiple Thread)
- java对称加密报错:Input length must be multiple of 8 when decrypting with padded cipher
- Spring Boot使用thymeleaf模板时报异常:template might not exist or might not be accessible by any of the configured Template Resolvers
- 'tools.jar' seems to be not in Android Studio.JAVA_
- Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp
- hibernate 解决the type java.lang.AutoCloseable can not be resolver
- '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp error
- 伪分布式启动Error: JAVA_HOME is not set and could not be found解决办法
- java.lang.IllegalArgumentException: Object returned from onCreateLoader must not be a non-static inn
- 交叉编译出现a local symbol' can not be used when making a shared object的解决方法
- 如何实现多个线程同步 (2013-11-10 12:07:24)转载▼ 标签: it 在编写一个类时,如果该类中的代码可能运行于多线程环境下,那么就要考虑同步的问题,Java实现线程同步的方法很多
- ubuntu Hadoop启动报Error: JAVA_HOME is not set and could not be found解决办法
- Caused by: java.sql.SQLException: Connections could not be acquired from the underlying database!
- Error:JAVA_HOME is not set and could not be found 解决般的法
- Note: This element has no attached Javadoc and the Javadoc could not be found in the attached source
- java.sql.SQLException:Value '0000-00-00' can not be represented as java.sql.Date
- 每日英语:Female muscle | Now is not a good time to be a man
- java.lang.IllegalArgumentException: FacesContext must not be null 错误分析及解决
- Caused by: java.sql.SQLException: Connections could not be acquired from the underlying database!
- Value '0000-00-00' can not be represented as java.sql.Timestamp