Java中应用多线程的场景?
最典型的应用比如tomcat,tomcat内部采用的就是多线程,上百个客户端访问同一个web应用,tomcat接入后都是把后续的处理扔给一个新的线程来处理,这个新的线程最后调用到我们的servlet程序,比如doGet或者doPost方法。
如果不采用多线程机制,上百个人同时访问一个web应用的时候,tomcat就得排队串行处理了,那样客户端根本是无法忍受那种访问速度的。
还有就是需要异步处理的时候,需要使用多线程。比如task a和task b要并行处理,单个线程只能串行处理,先做完task a然后再做task b。如果想要多个task同时执行的话,就必须为每个task分配一个线程,然后通过java虚拟机的线程调度,来同时执行多个任务。比如你的CPU是多核心的话,就可以让一个CPU执行一个线程。如果只有一个CPU的话,底层是按照分时复用的原则,各个线程按照时间片来获得CPU资源。
----------------------------------------------------------------------------------------------------------------------------------------------------------
你跟他说,如果做 java web 方面开发的话几乎用不到多线程!因为有多线程的地方 servlet 容器或者其他开发框架都已经实现掉了!
一般在网络应用程序中使用多线程的地方非常多!
另外,你说的拷贝文件使用多线程,那是没有用的!以多线程来提高效率的场景一般在 CPU 计算型,而不是在 IO 读写型。CPU 可以会有多个核心并行处理计算,但是磁盘 IO 就没这功能了,磁头只有一个,根本不可能靠多线程提高效率!
一般来说,磁盘 IO 的并发能力为 0,也就是说无法支持并发!网络 IO 的话由于带宽的限制的,使用多线程处理最多也只能达到带宽的极值。
对于磁盘 IO 来说,多线程可以用于一个线程专门用于读写文件,其他的线程用于对读取数据进行处理,这样才有可能更好地利用 CPU 资源。
如果仅仅是单纯的文件复制,使用多线程操作的话,会使用磁头在磁盘上不停地进行寻道操作,使得效率更为低下!
-----------------------------------------------------------------------------------------------------------------------------------------------------------
1。压力测试时,会用到多线程。
2。服务器编程时,会用到多线程。
3。使用监听器时,可能会用到多线程。
4。跑JOB时,可能会用到多线程。
-----------------------------------------------------------------------------------------------------------------------------------------------------------
学习了,还有一种极为普遍的使用多线程的场景是UI编程,一般UI界面绘制于主线程,为了不阻塞主线程让用户体验更流畅,需要创建单独的线程处理耗时操作,处理完了再更新主界面,典型的案例就是android应用开发
-----------------------------------------------------------------------------------------------------------------------------------------------------------
一些C/S模式比如说网络游戏(基于socket协议)一般在服务器那边处理的时候一个客户端,一个线程;还有就是一些银行软件,用到了线程同步等等
-----------------------------------------------------------------------------------------------------------------------------------------------------------
posted on 2013-11-09 18:36 heartstage 阅读(6078) 评论(0) 编辑 收藏 举报