如何学习java多线程和jvm虚拟机

时间:2022-12-26 18:05:53

首先,在网上搜索了几篇关于如何学习jvm和多线程的文章:

jvm:https://www.douban.com/doulist/2545443/

多线程:https://www.zhihu.com/question/19884663


看完了上面两个写的教程之后,真心觉得,技能这种东西,是会者不难,难者不会啊,经历了这么多天的书籍和小组讨论的风暴,逐渐的发现自己在这些方面的实践上面真心的还有很多的不足,有一些小小的发现和大家分享一下:


一、jvm


        说到JVM,身为一个虚拟机,了解他的原理的过程应该和电脑这样的实体机器差不多,但是又不能完全的把他当成咱们的电脑来看。那么,我们应该当成什么来看呢?

        首先从机制上来讲,jvm其实就是java代码的解释执行的环境,我们所有的类加载,还有一些底层的封装好的工具以及调用都会从这里进行执行。所以我们在看jvm的时候的重点就落在了一下三个方面:

   1、类加载(装载代码)

   2、内存模型(类加载在内存里面,你懂得)

   3、垃圾回收(程序执行完成之后的回收操作)

        这三个就是我们学习jvm的重点地方,至于其他的算法之类的,哗啦哗啦,其实都是这三种操作的辅助或者变形。

        想想詹爷当时为什么要创建java这个语言,其本质就是一次编译,到处运行么,所以通过以上的三个功能的紧密结合,我们的java程序就可以实现一次编译,到处运行的梦想了。

        这里,通过看《深入理解java虚拟机这本书》,了解到了一些类加载和内存管理的机制,还有一些垃圾回收的机制,最后形成知识网络,让我们可以进行应用的就是一些优化的例子,比如分析一个程序的执行时候,jvm各种内存区域的状态等等。

其实JDK就已经给我们弄好了一些工具,包括了一个java的mission Control,还有一个virtual jvm的程序,在jdk的bin目录下,我们都可以找到,自己玩一玩也挺好:

如何学习java多线程和jvm虚拟机


二、多线程


        说到底,我们学习多线程这么长的时间了,到现在只是敲过了几个例子的东西,之前在项目中使用过一次失败的线程池,然后就不了了之了(锁和逻辑纠缠不清),所以其实对于为什么要用多线程,怎么使用多线程还是所知甚少,但是基本的概念大概列一下:

      1、线程建立(类,接口,lambda)

      2、同步数据

      3、锁的使用

      4、线程池使用

      5、线程执行流程中状态的坑和变形使用

    实际在使用中使用到的,或者需要注意到的大概就是以上几点,在此基础之上引申出来的东西要多少有多少,但是无论如何,都是保证我们的线程在执行程序的时候,能得到我们需要的,或者期望的结果。

     在使用一个对象的时候,在这个领域我们听到的最多的就是他是不是线程安全的,其实是不是线程安全的,全在是怎么使用的,当然使用专用的线程安全的对象,能保证我们程序执行的结果,却因为使用了锁和同步机制,让我们的程序对于系统的资源消耗也是各种上升,所以都需要各种注意。