论坛首页 Java企业应用论坛

浅谈线程

浏览 1467 次
锁定老帖子 主题:浅谈线程
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-11-30  
刚看了一个  java中线程到底什么时候启动 的帖子小弟不才谈谈个人对java线程的几点看法。

线程是一个很有意思的东西。
在线程方面我大概经历了这么几个阶段。

第一个阶段  业务驱动线程,就是有业务马上开辟线程然后去处理业务,这中处理方式线程是不受控制的,创建了以后线程怎么走我也不知道。且让它自生自灭吧。不行了就内存溢出。

第二个阶段  创建了一个线程池,线程的个数是受控制的,终于不会内存溢出了。但是在现场非安全结束或者没有线程的情况下处理起来相当麻烦。基本上这时候去处理也是多余的。

第三个阶段  程序一开始就创建线程,让线程去监听队列,业务上队列,线程去抓业务然后去跑,处理完了继续回来监听。当然这里并非所有的线程都在监听队列。具体的实现可以参考LF线程模型。 但是LF线程模型如果直接拿来使用也是有点问题的。在这里我推荐使用JAVA的回调,保证线程的绝对安全。

对于多线程的应用我想说以下几个注意的地方:

第一  并非越多线程并发越好,你要考虑你的数据库连接是否够用,计算机资源使用够用等。如果你创建100个线程 每个线程进行一次数据库访问,那么你能同时提够100个连接吗?

第二  对于第三种模型建议在业务逻辑的实现中加上克隆,不要出现多个线程引用同一个对象的情况。要不然你会发现一个任务可能跑了很多次,而有的任务一次也没有跑。

第三  尽量不要再多线程中出现一些不可预测的逻辑,如果不能避免建议完善你的异常处理。业务逻辑的回调接口一定要能抛出业务不能正常结束的异常,要不然你这条线程很可能就会因为异常而永远挂起。这是很可怕的。

第四  对于有队列的线程(第三个阶段) 你要注意队列中是否才相同的任务(同一任务发生两次,这个对于定时任务是很经常见的),如果有那么会造成浪费。

第五  共享资源的控制,我虽然不推荐在多线程中出现共享资源,但逼不得已的时候切记要保护好你的共享资源。

最后说一下,我认为好的线程是存活在沙盒中的,绝对安全的,不要业务去驱动线程,应该是线程驱动业务。
就这么多了。
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics