关于多线程:无法理解java中的并发性,尝试阅读推荐的书籍

Cannot get my head around concurrency in java, tried reading from the recommended books

OK,我不仅是Java中的新并发,而且对于Java编程来说也是相当新的。我尝试理解Java教程中的并发性,尝试在实践中读取并发性,但它似乎太先进了,所以尝试从其他几本书中阅读:SCJP一个全面的Java编程语言第四版。就好像有些事情是不合情合理的,我不知道为什么,怎么做,形成正确的概念理解模式。我为无效地描述这个练习而道歉。但是有人可以推荐好的阅读材料和/或学习Java中并发的方法。


这听起来好像你很快就要接受测试了。认证?)关于Java并发"。您还没有经历过自然地遇到问题、思考如何解决问题以及转向并发以寻求解决方案的循环。如果是这样的话…

(1)不要怪你的大脑。相反,退后一步,开始思考你感兴趣的问题。把它们写下来。互联网应用程序是一个很好的起点。例如,编写某种可以处理来自不同用户的多个连接的Internet服务器,比如游戏服务器。或者,一个股票交易程序,它必须在处理经纪人信息的同时处理机器人的订单。

(2)考虑并发性。既然您有一个让您感兴趣的问题,并且将并发性简单地视为多任务处理,那么就绘制一个带有箭头的参与者/程序图,箭头表示他们需要如何相互通信。画出一个虚拟的骨架代码。实际上,您并不打算编写一个游戏服务器;但是您可以使用简单的空成员函数(如connectToGame(){}创建一个简单的骨架类库。

(3)现在你准备好了。运行一两个hello world线程示例。浏览您的书籍或浏览javadocs,并查看可用的不同并发结构。想一想你可能会用哪一个来解决你的问题。不要担心做出"正确的选择"。你很快就会知道你是否有什么有用的东西。

(4)接受试错。还有一个词是:学习!

现在,当你得到了一些这样的经验之后,你就可以拿起一个Java并发的书,阅读别人的问题。

坚持住,不要放弃。


but am also fairly new to java programming

把并发手册搁置几个月,继续阅读一本基本的Java/Sjp书,并大量练习基本的Java。根据书中的说明,不时地创建一个ThreadRunnable。玩几个月,直到你很好地掌握它。然后继续并发书。

跑步前先学走路,否则你会爬而不是跑。


这是一门很难的学科,没有人能完全掌握它,甚至连设计它的人也没有。

许多人只理解其中的一个子集。如果您只知道一些您可以自信地在程序中使用的技巧/模式,那就足够好了。从那里你积累了越来越多。

新手可能只知道他可以向方法中添加"synchronized"关键字。令人惊讶的是,这解决了很多问题,表现也很好,即使他不知道自己在做什么。


我最喜欢的学习Java书,它有一个关于并发的伟大章节:

Sun认证程序员和开发者为Java 2学习指南(考试310-035和310-027)

alt text


再加上我的两分价值:首先集中精力学习并发性的概念,而不是在任何特定语言中实际使用它的机制。如果你陷入语言结构的泥潭中,那么要对这个主题有一个高层次的理解就要困难得多。

为此,我建议您如何编写Carriero&gelernter的并行程序(免费和合法PDF下载)。它在描述概念和提供具体的代码示例之间取得了良好的平衡,并且在理论上不会陷入困境。它实际上可读性和娱乐性都很强(或者可能只有我一个人)。


我觉得我前后都能理解并发性。最近,我从办公室的书架上抓起一本书,发现它很好。不仅仅是并发,它为Java提供了一个很大的覆盖范围。

Java程序设计概论,第八版:综合版,Y. Daniel Liang

然而,我的大部分理解来自于代码处理、解决问题和尝试示例的经验。我从来没有真正理解穿线,直到我做了它。

并发性是复杂的,大多数人不会仅仅通过阅读就得到它。查看API并编写一些测试程序来尝试。无论你选择哪本书,试着不只是读代码,写出来然后运行它。一两天之后,你就会明白了。