我是以错误的方式看待多线程吗? (JAVA)

时间:2016-09-29 09:22:23

标签: java multithreading concurrency synchronization

过去几周,我一直在学习Java中的并发(多线程)。我发现它很困难,而且与迄今为止我在Java语言中遇到的任何东西(或者一般的编程)都有所不同。我经常不得不重读和重读,直到我开始完全理解一个小概念。

这令人沮丧,我想知道为什么这部分Java编程语言给了我这么多麻烦。

通常当我查看单线程程序的代码时,我会查看main方法,并在整个执行过程中开始逐步(如调试器)。在整个过程中,我试着在执行的每个点上记住变量及其状态(值)之类的一切。通常,在这样做的时候,我甚至会停在某些点,并思考程序执行在不同情况下会如何变化。如果我可以像这样从头到尾完成一个程序,我觉得我已经完全理解了代码和材料。

我想,我遇到的问题是,当我尝试将此方法应用于并发应用程序时,会发生很多事情(sleep(),同步方法,获取内部锁,使用等待的保护块) ()等等,并且有很多不确定性,什么时候会执行,我几乎不可能跟上一切。这让我感到沮丧,因为我希望有一种“我能控制正在发生的事情”的感觉,但是并发性是不可能的。

任何帮助将不胜感激!!!

2 个答案:

答案 0 :(得分:1)

并发是一个简单的概念,实际上 - 你有几个独立的执行路径,它们可以相互交互。您提到的内容,如同步,阻止,等待等等,都是技术细节,工具。

我建议尝试编写一些代码:-)想出一个多线程程序的想法并对其进行编码。在某些时候,您将需要使用您列出的其中一个工具,它们都将开始落实到位。这不是一个你应该仅在理论上理解的概念^^

答案 1 :(得分:1)

更多关于科学,并发编程是一门艺术。

在进入Java并发之前,请先仔细阅读概念性内容,即并发中的主要问题是什么?什么是锁?什么是信号量?什么是障碍?为什么我们使用那些?我们怎样才能将它们用于不同的目的,如变量保护,同步等?同样也有一些。

然后,在进入语言特定用法之前,您可能会获得一些非常重要的知识。

对于一直关注顺序编程并首先考虑并发性的人来说,一定要更难理解这些事情。但我相信你可以在一段时间后进入并行编程的顺序编程水平。 :))