zoukankan      html  css  js  c++  java
  • pingpong线程输出问题

    面试遇到两次一下题:

    public class Main {
    
        public static void main(String args[]) {
            Thread t = new Thread() {
            public void run() {
            pong();
            }
            }; 
            t.run();
            
            System.out.println("ping");
            }
            static void pong() {
            System.out.println("pong");
            }
    }

    注意t调用的方法。通过上网查资料和实际演示,总结如下:

    如果是t.run(),运行很多次,结果都是pong ping。后来终于发现了关键点所在,线程对象t,调用的不是start()方法,而是run()方法。后来开断点模式debug,发现调用run()方法,整个程序只有一个线程,而调用start()方法之后,程序就会多出一个线程。这时才有和主线程争cpu,可能出现多种结果的情况,但由于下面输出方法很快就被执行了,所以基本上都是“ping pong”的输出。

    所以run()和start()的区别就是:
    run()是Runnable接口中定义的一个方法,是为了让客户程序员在这个方法里写自己的功能代码的。直接调用和普通的类调用自己的成员方法是没有任何区别的。
    而start()则是线程开始运行的标志,当这个方法被调用后,程序中才会多出一个独立的线程,接着便是执行run()方法。

  • 相关阅读:
    php 之 没有mysql支持时的替代方案
    在php中使用sockets:从新闻组中获取文章
    PHP ON 阿里云的环境配置攻略
    java基础2
    java基础1
    连接查询(内连接)
    mysql数据约束
    mysql表中数据的增删改查2
    mysql表中数据的增删改查
    mysql表的增查改删
  • 原文地址:https://www.cnblogs.com/qiaomu/p/4869510.html
Copyright © 2011-2022 走看看