我觉得面向业务的多线程解决问题的两种思路,一个完整的A业务。1.拆分为多个部分由不同线程协作完成。
2.多个线程多次完成A业务,线程间没有协作。
对于第一种可以用阻塞唤醒,阻塞队列完成。
那第二种难道是多次启动线程就行了吗?,那跟每次新new一个A业务对象有什么区别?
还有什么时候使用多线程最好,举个例子
恳请指点,谢谢谢谢。。
你的第二种情况是什么场景下使用的,它这个是并行,一般常用于服务器端,像多个客户端请求服务器的同一个业务,就是这种场景。你没描述清楚1和2的应用场景,多线程在不同场景下使用方法不同
1:每个部分由不同的线程完成
2:同时多个线程完成同一个任务,线程之间没协作。
这个意思?
1.任务拆分,多线程协作完成的情况,大致是这么回事,只是不一定含有阻塞和唤醒操作,这个取决于模块设计。
2.线程 和 new 一个对象是不一样的概念,它们本身就是不同的东西。多个线程使用的业务对象可能是同一个。
多线程本质是为了更好的使用资源,提高系统性能,但并不是所有场景都适合用多线程编程(另外,并发不等于多线程编程)
3.线程和资源是两个概念,强调一下资源的存在。
举几个例子
1.自助餐厅,每个人都可以自主点餐,每个人都可以看成是一个线程,执行的任务是点餐,这个情景下,资源足够,没有规则约束。最直观的多线程运作
2.银行排队,每个人都领号排队,每个人都是一个线程,执行的任务是存钱,但只能等轮到自己的时候才能行动,有资源限制和约束,窗口越多,可以同时进行的线程操作就越多
3.医生门诊,每个人都领号排队,每个人都是一个线程,执行的任务是就诊,但医生只有一个,资源紧张,再多人同时来都没用,都得一个个来
4.团队协作,每个人的任务有交界处,但不完全重合,故可以先完成独立的部分,需要交接完成的任务需要等“交接”动作发生,队友的任务成果就是一个资源
(以上例子里的资源,也可以同时看做线程,现象简单化,就不做这个讨论了,就当做是不可变资源)
举例子 是为了说明,多线程编程其实是为了能更加高效和充分的利用资源,并不是启动一个线程那么简单。望题主能更好的理解线程的意义
凑巧路过回答,感觉问题有几个比较别扭的含义。。如果有什么用词不当的 或者 理解错了题主意思的话,请各位指出