zoukankan      html  css  js  c++  java
  • 多线程基础(主要内容转载于https://segmentfault.com/a/1190000014428190)

    • 进程作为资源分配的基本单位
    • 线程作为资源调度的基本单位,是程序的执行单元,执行路径(单线程:一条执行路径,多线程:多条执行路径)。是程序使用CPU的最基本单位。
    • 线程有3个基本状态

      • 执行、就绪、阻塞(还有新生,死亡)

      线程有5种基本操作

      • 派生、阻塞、激活、 调度、 结束
      • 线程有两个基本类型

        • 1) 用户级线程:管理过程全部由用户程序完成,操作系统内核心只对进程进行管理。
        • 2) 系统级线程(核心级线程):由操作系统内核进行管理。操作系统内核给应用程序提供相应的系统调用和应用程序接口API,以使用户程序可以创建、执行以及撤消线程。
        • 注意:当用户级线程都结束时,jvm虚拟机就会结束,不管保护线程是否还在运行;
        • 线程的属性:

          • 1)轻型实体;
          • 2)独立调度和分派的基本单位;
          • 3)可并发执行;
          • 4)共享进程资源
          • 值得注意的是:多线程的存在,不是提高程序的执行速度。其实是为了提高应用程序的使用率,程序的执行其实都是在抢CPU的资源,CPU的执行权。多个进程是在抢这个资源,而其中的某一个进程如果执行路径比较多,就会有更高的几率抢到CPU的执行权(注意:有阻塞的出现,才会使用多线程,即在一个线程发生阻塞时,其他线程可以继续使用CPU)
          • 通过上面的顶部注释我们就可以发现,创建多线程有两种方法:

            • 继承Thread,重写run方法
            • 实现Runnable接口,重写run方法
            • Java实现多线程需要注意的细节

              不要将run()start()搞混了~

              run()和start()方法区别:

              • run():仅仅是封装被线程执行的代码,直接调用是普通方法
              • start():首先启动了线程,然后再由jvm去调用该线程的run()方法。

              jvm虚拟机的启动是单线程的还是多线程的?

              • 是多线程的。不仅仅是启动main线程,还至少会启动垃圾回收线程的,不然谁帮你回收不用的内存~

              那么,既然有两种方式实现多线程,我们使用哪一种???

              一般我们使用实现Runnable接口

              • 可以避免java中的单继承的限制
              • 应该将并发运行任务和运行机制解耦,因此我们选择实现Runnable接口这种方式!
  • 相关阅读:
    微服务-01
    Java 类加载机制
    数据库&缓存
    JVM&GC
    MyBatis
    spring
    mysql技术内幕-读书笔记
    mysql CookBook -读书笔记
    从根上理解mysql-读书笔记
    高性能mysql-读书笔记
  • 原文地址:https://www.cnblogs.com/serendipity-fly/p/9358394.html
Copyright © 2011-2022 走看看