• Java中Main函数探讨


      上一章看到Main线程后,不禁疑问,Main函数不是执行完他的任务就结束他的使命了嘛?

    然后发现,事情没有那么简单。

    案例1:

     1 public class Main {
     2 
     3     public static void main(String[] args) {
     4        Thread t1= new Thread(() -> {
     5             while(true){
     6                 try {
     7                     Thread.sleep(1000);
     8                 } catch (InterruptedException e) {
     9                     e.printStackTrace();
    10                 }
    11             }
    12         });
    13        t1.setName("Hello WOrld Thread");
    14        //t1.start();
    15         System.out.println("Hello World!");
    16 
    17     }
    18 }

    执行完之后,线程就死了。  有没有发现你的这个按钮是黑色的?   相信我们在初始学习Java的时候,这个按钮都是黑色的把。

    第二种方式:  把线程打开  ,取消注释14行代码。

    我们可以看到按钮的对比:

    这是为什么呢?  我们深入虚拟机中探讨一下:

    用虚拟机指令:  C:Program FilesJavajdk1.8.0_211injvisualvm  查看一下他的线程:

     原来是:我们的JAVA程序,启动main函数之后,执行完他的任务,new了一个新的线程,但是这个线程还在不断执行中,并没有死亡,所有我们的Java程序还在运行中。

    如果:  我们把Hello WOrld Thread 改为守护线程:  

           t1.setName("Hello WOrld Thread");
           t1.setDaemon(true);
           t1.start();
            System.out.println("Hello World!");
    

     再运行一下程序,我们发现他按钮变成灰色的了。再进入jvisualvm 查看一下线程情况。

    好的,我们已经找不到Main这个进程了。

    总结:main函数执行完他的任务之后,就已经死亡掉了。  但是Java程序中,如果还有非守护线程还在执行过程中,我们的程序就依然在执行中。

  • 相关阅读:
    2019年1月18日23:20:02 夜盘
    2019年1月16日22:50:28 白糖SR1905
    2018/12/20 20:52:42 螺纹钢PTA豆粕
    2018/12/19 20:55:58 螺纹钢豆粕PTA
    2018-12-18 豆粕
    2018-12-18 19:53 螺纹钢
    记录一下自己的跑步数据
    Xamarin.Lottie---UWP运行出错时的注意事项
    Hitting refresh on my career(译)----重新定义我的事业
    ChatKit for Xamarin.Android 绑定
  • 原文地址:https://www.cnblogs.com/patatoforsyj/p/13048900.html
Copyright © 2020-2023  润新知