多线程的几点认识

1:在单核的CPU上,多线程的设计为什么也能够提高程序的整体性能?

原因就是:阻塞

如IO阻塞,这种情况超出了当前运行程序所用控制的范围,所以,如果是单线程,则整个程序都将停下来,而多线程情况下,其它线程还能够继续执行。

事实上,如果没有任务会阻塞,那么在单处理器上使用并发就没有任何意义


2:extends Thread 与 implements Runnable的区别?

要看所表达的语义是什么?是要表示一个任务,还是表示一个线程对象?

引用网上的一段话:http://topic.csdn.net/u/20090316/13/37e19f74-470f-4e9e-b5b7-508fe92ac3eb.html


答:楼主的着眼点仅仅是语法等上的区别,学习时更应该注重概念背后隐藏的设计意图.若仅仅从语言或语法本身着眼,容易设计出"怪胎式"的代码.

1)一般认为:实现Runnable接口的对象,其着眼点主要含义是:一个计算任务.它代表一个要被其它线程(如:线程池中的线程)执行的任务.着眼点是:交由其它人去完成的一个计算任务. ---对应着:要做的工作

2)一般认为:从Thread类继承的含义主要是:一个能执行其它(或自己)的任务的一个线程对象.着眼点是:线程的功能(通过继承来扩展执行其它计算任务的能力) ---对应着:做工作的工作人员

3)当然:若一个类已有父亲,不能再从Thread类继承,只好实现Runnable接口来达到线程的目的,这是一种选择了.

以上仅是从设计代码的一种意图上说明,仅供你参考.



3:事件驱动中对于异步调用的结果获取的两种策略:

拉:调用者(Caller)自己去取结果,并在取得结果后进行下一步的处理:Future模式

推:被调者(Callee)通过持有后处理操作(ProcessData)的接口类型的引用(该引用可以是任何满足接口定义的类型,包括Caller本身),来完成下一步的处理,即使用: 回调机制

两种方式的实现方法都是通过在抛出的事件(Event)中带有不同的参数,具体来说,

对于 拉:event = {eventhandler, parameters(供EventHandler使用), FutureResult(在Caller中已经持有的一个引用,指向最终Callee将存放结果的位置)}

对于 推:event = {eventhandler, parameters(供EventHandler使用), ProcessData(包含回调方法的接口引用)}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值