浅谈线程

刚看了一个 java中线程到底什么时候启动 的帖子小弟不才谈谈个人对java线程的几点看法。

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

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

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

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

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

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

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

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

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

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

最后说一下,我认为好的线程是存活在沙盒中的,绝对安全的,不要业务去驱动线程,应该是线程驱动业务。
就这么多了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值