03.06 在学JAVA的时候对io,多线程一知半解,是继续往后学到做项目的时候弄明白呢还是刚开始就要弄懂它们?

用户68056351


我的建议是刚开始不要太过纠结于一些细节点,只要能做到能用、会用就可以了。等以后你实际做项目了,有了具体实践的场景,你再回过头来看这些理论知识,肯定会有一种豁然开朗的感觉。

理论抓整体,舍弃细枝末节

这里让你设计细枝末节不是说不懂的就不需要去了解,可以按照是什么、为什么、怎么使用的原则去看一些理论知识,比如多线程:

  1. 多线程是什么?可以多个线程并发同事去干某件事情。

  2. 为什么使用多线程?可多线并行,可以提高效率

  3. 怎么使用?可以通过继承Thread类,实现Runnable、Callable接口,线程池等方式

对于初学者,我认为掌握了多线程基本的知识后就可以了。此时如果再去了解一些线程死锁、线程安全等深入一些的问题的话,你可能也不太能理解。就算当时能理解,可是你没有实际使用过啊,有些坑是一定你自己亲自去踩了才能够去明白的。就像我们上学时学过的高等代数、微积分之类的课程,当时死记硬背都会啊,可是平时不用现在有几个记得住的?所以我不建议一开始就太深入一些技术细节,掌握基础理论即可。

实践出真知,实践后再巩固理论

俗话说“实践出真知”,在我们的项目的实践中,肯定会遇到各种各样的问题,我们解决问题之后,要勤于思考:为什么这里会出问题?它背后的逻辑是怎么实现的?这些问题会推动我们主动回头去看那些晦涩难懂的理论知识,理论结合实践,相信你就会有一种豁然开朗的感觉。

只有在不断理论-实践-理论的循环过程中,我们才能更好的掌握Java这门语言。


代码那些事儿


一定不要带着疑问进入项目的开发。

建议题主可以做一些小案例,例如文件读写,socket通信来增强对IO的理解,而多线程可以手写一个爬虫来体会多线程的强大之处。


李老师tome


Java这一行目前以框架为主,都是封装好的你。你暂时可以不必纠结,应该对工作影响不大。但是从长远考虑必须要学好。io这块Apache有几个工具包,可以多读读相关代码。还有个hutool的工具包对常用操作有封装可以从这方面入手。




自成宇宙


关于这个问题,几乎所有从业者都会以过来人身份建议你:

先把笔试/面试题整明白,把项目中用到的技术学会用,至于 IO 和 线程 可以先放一放,以后不断做项目不断理解。

相信所有从业者都是从这一部分一步一步走过来的,因此建议肯定是有道理的。

但以我们对很多新手在项目中的表现来看,我们还是倾向于先把 IO 和 多线程最基本的东西整明白了再继续向后学习。

另外就是,整明白 IO 和 多线程 跟 做项目 并不冲突,两者可以同时进行。把 IO 和 多线程 整明白了有助于做项目,通过做项目可以加深对 IO 和 多线程 的理解。

以下简单介绍一下我们期望新手能够掌握的 IO 和 多线程 知识 以及 我们建议的学习方法。


1、IO部分

这部分内容相对于多线程来说容易多了,是初学者可以搞明白的。

在 Java IO 部分,我们建议初学者依次序掌握以下内容:

  • 文件( 通过 File 类的实例操作 文件 和 目录 )
  • 流 ( 输入流/输出流 、字符流/字节流 、节点流/过滤流 )
  • 顺序访问文件和随机访问文件
  • 对象序列化和反序列化

如果以上内容学习起来比较轻松,建议再依次序学习以下内容:

  • JDK 1.7 之前的 NIO ( Buffer 、Channel 、 Selector )

  • JDK 1.7 之后的 NIO ( 这部分比较多,这里不罗列 )

这里与一般图书资料或视频资料建议的学习顺序不太一样,我们建议初学者先学习 File 类,彻底理解 File 实例的含义,理解 文件 和 目录 的区别,理解 文件元数据 和 文件内容 的区别,理解字符编码对文件的影响,然后再学习 IO 部分。

学习 IO 部分也要讲究学习方法,比如学习顺序。

虽然传统 IO 部分涉及的类非常多,但并不是无规律可循,实际上只需要掌握四个类的用法,基本上就可以搞定其它的 IO 类了,这四个类是:

  • java.io.InputStream

  • java.io.OutputStream

  • java.io.Reader

  • java.io.Writer

以上四个类分别对应了字节输入流、字节输出流、字符输入流、字符输出流。

以其中的 InputStream 为例,该类属于字节流,是所有表示字节输入流的类的父类,掌握这个类的用法,等同于从根本上掌握了字节输入流的用法。另外三个类的地位与 InputStream 类的地位是相同的。

以下以字节流为例展示传统 IO 中字节流的继承体系:

同样在学习完我们建议掌握的传统 IO 知识后,在学习 NIO 时,也可以采用同样的策略,比如学习 Buffer 可以从最顶层的 Buffer类 学起来,学习 Channel 可以从最顶层的 Channel接口 学起。


2、多线程部分

在整个 Java 基础部分,这部分属于偏难的,甚至很多高校讲到这部分后老师都是略过去或者仅讲一下如何创建线程、如何启动线程。

虽然说这部分偏难,有些朋友为了相对深入研究这部分,甚至需要恶补一下操作系统知识,但这仍然不是我们要放弃这部分的理由。

实际上,所有的从业者都知道的,真正从事开发工作后,我们所使用的框架和容器基本上都把多线程部分封装了,果真等到做项目时、等到工作后再去琢磨多线程,恐怕会废掉很多人(很多人恐怕再也不会去琢磨多线程了)。曾经面试过号称有五年工作经验的人,对多线程部分甚至连最基本的知识都不能准确作答。

所以我们建议多线程部分还是要先掌握一些基础知识并在刚开始学习的时候就开始琢磨起来,以后工作了做项目时才会有更深的体会,当然也会通过项目更加加深理解。

这部分我们建议初学者依次序掌握以下内容:

  • 操作系统、程序、进程、线程之间的关系

  • 线程调度方式 ( 协作式/抢占式 ) 、理解并行和并发

  • 创建线程的方法 ( 建议先学 Thread 和 Runnable ,其它先放放 )

  • 线程状态

  • 线程调度 ( priority 、yield 、join 、sleep 、demon )

  • 同步和互斥

  • 线程通信 ( wait / notify)

学习以上内容之后,建议在学习以下内容:

  • 多线程并发

  • 线程通信 (多线程之间有数据传递,不仅是 wait 和 notify )

  • 线程池

因为这部分内容一旦展开就非常非常多,所以,建议初学者在刚开始不要再继续深入研究,到此打住。等到工作两三年后再回来深入研究这部分内容也来得及。


墨子编程


多线程在java中比较普遍的问题,也是较难理解的部分。

现在可以学习多线程,多线程的内容比较多,有的也涉及到底层。现在可以学学试着理解,有一知半解的时候可以试试找找资料,也可以先记录下来,后面慢慢理解。内容较多,等项目运用到的时候,再学习,可能不知从哪里做起,到时候又花费较多的时间。

总之,学习还是循序渐进,一步步的理解。




代码接盘侠


学的时候就可以写点小demo。像io,可以试着用代码把文件搞到另外一个文件里边,这里还可以看下poi读取excel的例子,这里边就牵扯到流的东西,用java操作excel,word,这里边还是有点难度的。另外,线程池在具体的项目中用的比较多,搞线程这方面的时候,可以重点看下这方面怎么弄。



林夕adp


多线程在java中算是比较难的一块,因此对于刚开始学习的话确实比较难理解,涉及到线程安全的问题。在你学习的过程中可以继续往后学,不影响你学其他模块,最后学完之后可以单独对多线程模块进行强化学习,代码实践,之前我看过一本多线程的书,可以推荐给你。


java你我他


先往后边学,学习框架知识,许多框架中运用到了java基础比如说多线程.IO.集合等,这时候如果想更深层次的学习框架,那么就要主动回头学习一下基础知识,这样有目的性的学习效果会比你现在死记硬背好多了。



程序猿Jin


我也是半路出家的java程序员,而且主要靠自学起家的。

作为新手,如果你需要找工作,建议你把面试常问的问题搞清楚,就可以了。如果你已经上班了,建议你有一两年实际开发经验以后,再去彻底搞清楚这些问题。


王小码


Java基础很重要,这个才是限制未来的发展


分享到:


相關文章: