首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“在分布式环境中,不使用多线程”--为什么?

“在分布式环境中,不使用多线程”--为什么?
EN

Stack Overflow用户
提问于 2019-05-17 18:36:47
回答 4查看 198关注 0票数 3

我在一个托管小型Java应用程序的平台上工作,所有这些应用程序目前都使用单个线程,位于Docker引擎中,使用来自Kafka服务器的数据并记录到中央数据库。

现在,我需要将另一个Java应用程序放到这个平台上。手边的这个应用程序使用了大量的多线程,我已经在Docker容器中测试了它,它在那里工作得很好,所以我已经准备好将它部署到手动缩放的平台上,也就是说,有人会定义要启动的容器的数量,每个容器都包含这个应用程序的一个实例。

我的架构师有一个反对意见,他说“在分布式环境中,我们从不使用多线程”。因此,现在,我必须重构我的应用程序,消除其中任何与线程相关的逻辑,使其成为单线程。我要求他提供更详细的理由,但他大叫“如果你不知道这个原则,你在Java附近就没有立足之地”。

在分布式系统中使用多线程Java应用程序真的是一个错误吗?分布式系统是一个包含10或20台物理机的简单集群,每个物理机托管许多虚拟机,然后这些虚拟机运行Docker容器,其中包含Java应用程序。

老实说,我不认为容器内存在多线程的问题。这真的是一个错误还是某种“禁止”?

谢谢。

EN

回答 4

Stack Overflow用户

发布于 2019-05-17 19:05:58

例如,当您编写将在Java EE应用程序服务器中运行的web应用程序时,通常不应在web应用程序中启动自己的线程。应用服务器将管理线程,并将分配线程来处理服务器上的传入请求。

但是,在分布式环境中使用多线程从来都不是一个好主意,这是没有硬规则或理由的。

使应用程序成为单线程有很多优点:代码会更简单,而且您不必处理复杂的并发问题。

但是“在分布式环境中我们从不使用多线程”并不一定总是正确的,“如果你不知道这个原则,你就没有接近Java的位置”听起来傲慢和居高临下。

票数 2
EN

Stack Overflow用户

发布于 2019-05-17 18:44:41

我猜他只是告诉你这一点,因为使用单线程可以消除多线程和数据排序问题。不过,多线程并没有什么问题。

票数 1
EN

Stack Overflow用户

发布于 2019-06-12 19:22:08

什么?我们在我们的应用程序中大量使用了RxJava和Spring Reactor,而且它运行得很好。无论如何,您不能跨两个JVM使用线程。因此,只需确保您的逻辑在单个JVM上如您所期望的那样工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56184687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档