我想我“了解”了 Java 多线程的基础知识。如果我没记错的话,你会做一些大工作并弄清楚如何将它分成多个(并发)任务。然后将这些任务实现为Runnable
s 或Callable
s 并将它们全部提交给ExecutorService
. (所以,首先,如果我错了这么多,请从纠正我开始!!!)
其次,我必须想象您在内部实现的代码run()
或call()
必须尽可能“并行化”,使用非阻塞算法等。这就是困难的部分(编写并行代码)。正确的?不正确?
但是我仍然遇到Java并发的真正问题(我猜一般是并发),这是这个问题的真正主题,是:
什么时候最适合多线程?
我从 Stack Overflow 上的另一个问题中看到了一个示例,其中发布者建议创建多个线程来读取和处理一个巨大的文本文件(Moby Dick书),一位回答者评论说,用于从磁盘读取的多线程是一个可怕的主意。他们这样做的理由是,在已经很慢的进程(磁盘访问)之上,您将有多个线程引入上下文切换的开销。
所以这让我开始思考:哪些类型的问题适合多线程,哪些类型的问题应该始终序列化?提前致谢!