关于多线程和线程池 本帖最后由 qemperor 于 2011-03-01 10:17:26 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 并不是很正确。线程池主要是为了线程的重用而存在的。虽然对我们来说只要 new Thread(xxx).start() 就可以启动一个线程了,但是 JVM 和操作系统却要为此做出大量的工作,而且这种线程操作在完成后就被 JVM 和操作系统回收了。这样的话,导致系统花了很大的精力做了几秒钟的事情就将其回收了,不知道大家感觉怎么样,我感觉这种比较亏。所以线程池的概念就出来了,new Thread 执行完一个任务后,并不是将其扔掉,而是将其放回线程池中,为下一个任务做准备。我不知道你知不知道有一个称为数据库连接池的东西,也是这个道理。要实现一个线程池是非常复杂的。比如说,一个线程在执行任务时产生了异常,这个线程就会丢失,池中可用的线程就少了一个,这种情况称为线程泄漏,当发生线程泄漏时,线程池需要重新补充一个线程进去。等等之类的问题都是实现一个线程池需要考虑的问题。 线程池也有你所说的功能,因为操作系统对于一个进程所能开启的线程数量是有限制的,一般不会超过 2000 个,如果都是使用 new Thread#start 的话,而且执行的任务都很耗时,在请求量大时,系统资源就会耗尽,导致 JVM 崩溃。线程池可以限制最大可以执行的任务数量,超过数量限制的任务就必须等待。 简单点,多线程是为了系统资源(西皮优,内存,总线等,但最主要的还是西皮优)得到更高效的使用,使得系统性能得到最大限度的发挥。多线程是操作系统在内核级实现(支持)的。java作为一种编程语言的一种,提供了多线程的API,最终实现还是操作系统完成的。玩过DOS吗?它是一种操作系统,单任务单用户。如果你要把光驱里面的电影复制到硬盘,win下全选,然后拖过来,你可以看到好几个复制对话框弹出来,同时复制。这是因为win的explorer(资源管理器)是多线程的。dos下呢?copy f:\movie\*.rmvb d:\bak这个命令也是复制所有的,但是复制的是一个一个复制的。相比之下的差别就不言而喻了 在web.xml中配置lisener出现如下错误 做一个功能 比喻控制一次只有10个人在使用 如果超过10个人 就的等待 并给出提示 学习java的一个问题 有没有什么好的办法实现两个用户不能同时读取同一条数据? Spring + OpenJpa 错误,菜鸟求助!! svg转pdf问题 这个小程序怎么就编译通不过呢 关于数据库连接池的错误,请大家帮忙看看(非常急) j2ee问题 现在公司里有没有用jdk的? 求教:类似于QQ宠物的桌面程序的实现思想 新手帖:关于工作流
如果你要把光驱里面的电影复制到硬盘,win下全选,然后拖过来,你可以看到好几个复制对话框弹出来,同时复制。这是因为win的explorer(资源管理器)是多线程的。dos下呢?
copy f:\movie\*.rmvb d:\bak这个命令也是复制所有的,但是复制的是一个一个复制的。相比之下的差别就不言而喻了