• 以前没有写笔记的习惯,现在慢慢的发现及时总结是多么的重要。 这一篇文章主要关于java多线程一些常见的疑惑点。因为讲解多线程的书籍和文章已经很多了,所以我也不好意思多说,嘻嘻嘻、大家可以去参考一些那些书籍。我这个文章主要关于实际的一些问题。同时也算是我以后复习的资料吧,。还请大家多多指教。 同时希望多结交一些技术上的朋友。谢谢。


    java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口。

    以下就是我们常见的问题了:

    1、

    为什么我们不能直接调用run()方法呢?

    我的理解是:线程的运行需要本地操作系统的支持。

    如果你查看start的源代码的时候,会发现:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public synchronized void start() {
            /**
         * This method is not invoked for the main method thread or "system"
         * group threads created/set up by the VM. Any new functionality added
         * to this method in the future may have to also be added to the VM.
         *
         * A zero status value corresponds to state "NEW".
             */
            if (threadStatus != 0 || this != me)
                throw new IllegalThreadStateException();
            group.add(this);
            start0();
            if (stopBeforeStart) {
            stop0(throwableFromStop);
        }
    }
    private native void start0();

    注意我用红色加粗的那一条语句,说明此处调用的是start0()。并且这个这个方法用了native关键字,次关键字表示调用本地操作系统的函数。因为多线程的实现需要本地操作系统的支持。

    但是start方法重复调用的话,会出现java.lang.IllegalThreadStateException异常。

    2、其实Thread中的run方法调用的是Runnable接口的run方法。不知道大家发现没有,Thread和Runnable都实现了run方法,这种操作模式其实就是代理模式。

    3、实现Runnable接口比继承Thread类所具有的优势:

    1):适合多个相同的程序代码的线程去处理同一个资源

    2):因为继承是单继承,当一个类继承了其他类,就不能继承Thread类,就无法实现多线程

    那么针对继承的局限性,实现接口来完成多线程则更加灵活

    3):增加程序的健壮性,代码可以被多个线程共享,代码和数据独立。

    4、提醒一下大家:main方法其实也是一个线程。在java中所以的线程都是同时启动的,至于什么时候,哪个先执行,完全看谁先得到CPU的资源。

    java中,每次程序运行至少启动2个线程。一个是main线程,一个是垃圾收集线程。因为每当使用java命令执行一个类的时候,实际上都会启动一个JVM,每一个jVM实习在就是在操作系统中启动了一个进程。

    5、另外,主线程的优先级是5.

    线程的礼让。

    在线程操作中,也可以使用yield()方法,将一个线程的操作暂时交给其他线程执行。

     

    相信自己的选择,不要犹豫
  • 相关阅读:
    from 的使用
    Form组件 钩子方法
    session cookie 中间件
    Django 中购物车的登录 注册 退出
    python安装
    Skeleton-Based Action Recognition with Directed Graph Neural Network
    Two-Stream Adaptive Graph Convolutional Network for Skeleton-Based Action Recognition
    Everybody Dance Now
    Collaborative Spatioitemporal Feature Learning for Video Action Recognition
    python安装第三方库--换镜像源
  • 原文地址:https://www.cnblogs.com/beiyi888/p/BoomOoO.html
Copyright © 2020-2023  润新知