程序中有多个任务,每个任务都采用一个线程来处理,每隔一定时间重复执行。求帮忙。

时间:2023-01-21 07:56:06
一开始有n个任务,每个任务都要做步骤A、B、C、D,且都是后者依赖前者(即A的执行结果要传给B……),其中A、B涉及到网络访问。为处理方便,把四个步骤都封装为四个函数FA()、FB()、FC()、FD(),每个任务要传入的参数都有不同,且参数个数大于10个。每个任务每隔若干时间T都要执行一遍。对现有任务的操作有启动/停止/删除。以上四个步骤中,A、B最有可能出现异常(因为网络访问涉及到不稳定的因素较多),C、D出现异常的概率很低(可以认为几乎为0)。也可以新增任务,每次只能新增一个。如果采用多线程技术来做,有以下场景描述/要求/问题:
1、每新增一个任务,都放置到现有任务的后面;
2、每新增一个任务,都为它创建一个线程来处理;
3、每个任务都采用一个线程来处理,一个任务对应一个线程;
4、有n个任务,则程序启动后就要创建好n个线程;
5、每次只能执行一个线程,一旦执行完,无论任务的结果是成功还是失败,都要唤醒下一个线程;
6、每个线程内A、B出现异常该如何处理?(异常发生后要执行应对措施,可能会使该线程多执行时间);
7、过了若干时间T后,该到某个线程X执行了,但当前其他线程Y还没有执行完,该怎么做?让X继续等待吗?
8、对任务的启动/停止/删除是不是可以认为对应着线程的恢复/挂起/销毁?
9、每个任务每隔若干时间T都要执行一遍,如何能做得到?使用定时器吗?

我对多线程技术不熟悉,正在了解学习中。上面9点有什么不正确的地方,请大家帮忙指出来。
简单来说就是有多个任务要定时重复执行,使用多线程技术应该怎么做?
请大家给出有建设性的回复哈。

12 个解决方案

#1


每次只能执行一个线程,一旦执行完,无论任务的结果是成功还是失败,都要唤醒下一个线程;

从此要求理解,lz整体只要一个线程轮流的执行任务就可以,反正任务在执行时,别的线程都不能执行

#2


线程池来做任务,来了任务放入队列,线程池从队列中取任务执行
队列就不停地增加任务,线程执行完了,就做新的任务

#3


整个问题是不是太复杂了,大家没有看明白呢?

#4


我好像就没有耐心看下去

#5


整个问题是不是太复杂了,大家没有看明白呢? 

#6


内容不精炼 看不下去

看标题,

定时器   隔段时间重复执行

任务有依赖关系,就用一个线程排好顺序一个一个去执行

#7


1. 如果启用的线程过多,可以考虑用线程池。
因为线程并不是越多效率越高,线程切换都需要系统开销。
2.多线程有先后要求,肯定涉及线程同步。
3.问题中说的5、6涉及异常处理,就是某次处理出现挂死或者异常,需要有对应的
超时检测及处理。
4.多线程处理不好,引发的异常多种多样,如果线程异常终止,可能会涉及资源泄露。
建议先把业务逻辑完成,再进行优化。

#8


“HANDLE hjob=CreateJobObject(&sa,"job1");” 。。。 ???

#9


整个问题是不是太复杂了,大家没有看明白呢?  

#10


线程池,应该会涉及到同步问题。

#11


程序中有多个任务,每个任务都采用一个线程来处理,每隔一定时间重复执行。求帮忙。
问题的基本方向是把复杂问题简单化。

#12


引用 7 楼 xian_wwq 的回复:
1. 如果启用的线程过多,可以考虑用线程池。
因为线程并不是越多效率越高,线程切换都需要系统开销。
2.多线程有先后要求,肯定涉及线程同步。
3.问题中说的5、6涉及异常处理,就是某次处理出现挂死或者异常,需要有对应的
超时检测及处理。
4.多线程处理不好,引发的异常多种多样,如果线程异常终止,可能会涉及资源泄露。
建议先把业务逻辑完成,再进行优化。

+1

#1


每次只能执行一个线程,一旦执行完,无论任务的结果是成功还是失败,都要唤醒下一个线程;

从此要求理解,lz整体只要一个线程轮流的执行任务就可以,反正任务在执行时,别的线程都不能执行

#2


线程池来做任务,来了任务放入队列,线程池从队列中取任务执行
队列就不停地增加任务,线程执行完了,就做新的任务

#3


整个问题是不是太复杂了,大家没有看明白呢?

#4


我好像就没有耐心看下去

#5


整个问题是不是太复杂了,大家没有看明白呢? 

#6


内容不精炼 看不下去

看标题,

定时器   隔段时间重复执行

任务有依赖关系,就用一个线程排好顺序一个一个去执行

#7


1. 如果启用的线程过多,可以考虑用线程池。
因为线程并不是越多效率越高,线程切换都需要系统开销。
2.多线程有先后要求,肯定涉及线程同步。
3.问题中说的5、6涉及异常处理,就是某次处理出现挂死或者异常,需要有对应的
超时检测及处理。
4.多线程处理不好,引发的异常多种多样,如果线程异常终止,可能会涉及资源泄露。
建议先把业务逻辑完成,再进行优化。

#8


“HANDLE hjob=CreateJobObject(&sa,"job1");” 。。。 ???

#9


整个问题是不是太复杂了,大家没有看明白呢?  

#10


线程池,应该会涉及到同步问题。

#11


程序中有多个任务,每个任务都采用一个线程来处理,每隔一定时间重复执行。求帮忙。
问题的基本方向是把复杂问题简单化。

#12


引用 7 楼 xian_wwq 的回复:
1. 如果启用的线程过多,可以考虑用线程池。
因为线程并不是越多效率越高,线程切换都需要系统开销。
2.多线程有先后要求,肯定涉及线程同步。
3.问题中说的5、6涉及异常处理,就是某次处理出现挂死或者异常,需要有对应的
超时检测及处理。
4.多线程处理不好,引发的异常多种多样,如果线程异常终止,可能会涉及资源泄露。
建议先把业务逻辑完成,再进行优化。

+1