浏览 1467 次
锁定老帖子 主题:浅谈线程
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-11-30
线程是一个很有意思的东西。 在线程方面我大概经历了这么几个阶段。 第一个阶段 业务驱动线程,就是有业务马上开辟线程然后去处理业务,这中处理方式线程是不受控制的,创建了以后线程怎么走我也不知道。且让它自生自灭吧。不行了就内存溢出。 第二个阶段 创建了一个线程池,线程的个数是受控制的,终于不会内存溢出了。但是在现场非安全结束或者没有线程的情况下处理起来相当麻烦。基本上这时候去处理也是多余的。 第三个阶段 程序一开始就创建线程,让线程去监听队列,业务上队列,线程去抓业务然后去跑,处理完了继续回来监听。当然这里并非所有的线程都在监听队列。具体的实现可以参考LF线程模型。 但是LF线程模型如果直接拿来使用也是有点问题的。在这里我推荐使用JAVA的回调,保证线程的绝对安全。 对于多线程的应用我想说以下几个注意的地方: 第一 并非越多线程并发越好,你要考虑你的数据库连接是否够用,计算机资源使用够用等。如果你创建100个线程 每个线程进行一次数据库访问,那么你能同时提够100个连接吗? 第二 对于第三种模型建议在业务逻辑的实现中加上克隆,不要出现多个线程引用同一个对象的情况。要不然你会发现一个任务可能跑了很多次,而有的任务一次也没有跑。 第三 尽量不要再多线程中出现一些不可预测的逻辑,如果不能避免建议完善你的异常处理。业务逻辑的回调接口一定要能抛出业务不能正常结束的异常,要不然你这条线程很可能就会因为异常而永远挂起。这是很可怕的。 第四 对于有队列的线程(第三个阶段) 你要注意队列中是否才相同的任务(同一任务发生两次,这个对于定时任务是很经常见的),如果有那么会造成浪费。 第五 共享资源的控制,我虽然不推荐在多线程中出现共享资源,但逼不得已的时候切记要保护好你的共享资源。 最后说一下,我认为好的线程是存活在沙盒中的,绝对安全的,不要业务去驱动线程,应该是线程驱动业务。 就这么多了。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |