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"); } }
    输出:pingpong 解释:调用run()方法,整个程序只有一个线程,主线程,run()是Runnable接口中定义的一个方法,是为了让客户程序员在这个方法里写自己的功能代码的。直接调用和普通的类调用自己的成员方法是没有任何区别的。
    第二种情况
    public static void main(String args[]) {
            Thread t = new Thread() {
            public void run() {
            pong();
            }
            }; 
            t.start();
            
            System.out.println("ping");
            }
            static void pong() {
            System.out.println("pong");
            }
    }
    输出:pongping,解释:用start()方法之后,程序就会多出一个线程,设定新线程进入 “就绪” 状态,等待 CPU 调度之后才会执行
    这时才有和主线程争cpu。
    而下一个 System.out.print() 几乎(概率大于99%)可以认为是立即接着执行的。
    所以,最终效果就是,几乎都是 pongping。
    第三种情况

    public class Test02 {
    public static void main(String args[]) throws InterruptedException {
    Thread mThread = Thread.currentThread();
    Thread t = new Thread() {
    public void run() {
    try {
    Thread.sleep(250);// 1.  这句话注释掉和不注释掉的区别,或者更改sleep里面时间的区别
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    pong();
    }
    };
    t.start();// 换成t.run(),观察不同一般在笔试题中是陷阱,混淆start
    mThread.sleep(250);// 2.  这句话注释掉和不注释掉的区别,或者更改sleep里面时间的区别
    System.out.println("ping");
    }

    static void pong() {
    System.out.println("pong");
    }

    }

    输出pingpong和pongping都有可能

  • 相关阅读:
    其实说起来要国庆节回去,心里有点担心再最后买不到票
    现在快要中秋节,之后又是国庆节
    天气开始降温,今天会下雨
    昨天晚上控制家里的电脑,与家里人视频
    有时候手机打开微信或者其它应用真的是非常慢
    手机有时候卡的不行,还是自己照顾着使用吧
    这几天晚上都是再看小别离,还是有点意思
    函数初识
    Python文件操作
    Python字符编码
  • 原文地址:https://www.cnblogs.com/wangqingming/p/10695074.html
Copyright © 2011-2022 走看看