开始怀疑多线程的作用了……
来源:5-18 循环尝试,不释放CPU

林就远
2020-11-26
老师,您好,看了您的课之后,我最近在公司开始写了个有关线程的程序功能。
功能如下:主线程读取某张表有多少该待处理的记录,然后用到了ForkJoinPool,来进行将任务不断二分。我设置的需要二分的值是8个记录数。比如我主线程查找到数据库中待处理的数据是10(具体是多少条记录得看线上,这里只是举例),那么大于8,所以就要分为5,5用两个线程执行。考虑到线程安全问题,我又对线程要处理的任务加了ReentrantLock锁,将关键代码保证同步。使得这个线程处理完了下个线程才进来继续执行。并且为了使得任务执行完成之后再继续走主线程逻辑,我还用到了CountDownlatch工具。
感受:说实话,这个功能虽然不复杂,但是我确实挺满意的。因为我是第一次在项目中用到ForkJoinPool以及ReentrantLock和CountDownlatch这些看起来很“高端”的功能。
事故:领导看了之后,问了我一个问题,我的回答苍白无力。
问:既然你的线程池中的子线程是通过ReentrantLock来保证一个接一个顺序执行的,那为什么要用到多线程?和单线程相比有点在哪?为什么10条任务数,你要分两个线程,每个线程顺序去执行5条记录数,这和直接让主线程执行这10条有差别吗?
答:内心Os,其实我已经被领导说服了。
疑问:对啊,ReentrantLock锁既然保证了线程安全,让线程一个个顺序的执行,那么为什么还要多线程呢?
在我这个案例里是不是不适合用多线程实现这个功能?老师,如果你是我,你会怎么回答这个问题呢?
哎,突然觉得好无趣,想不通,是我这个案例不合适吗?我想了想,我这个案例确实有点不合适……
老师,我现在好迷茫,望解惑……
1回答
-
如果每个任务的所有内容,都要被锁住,那么就不适用多线程,但是如果每个任务中,有50%可以并行,有50%需要用锁来串行,那么多线程就可以提高效率,如果每个任务之间都是独立的,那么就不需要加锁,并行就会快很多。
112020-11-27
相似问题