java pingpong_面试题。线程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 解釋:調(diào)用run()方法,整個(gè)程序只有一個(gè)線程,主線程,run()是Runnable接口中定義的一個(gè)方法,是為了讓客戶程序員在這個(gè)方法里寫(xiě)自己的功能代碼的。直接調(diào)用和普通的類調(diào)用自己的成員方法是沒(méi)有任何區(qū)別的。
第二種情況
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()方法之后,程序就會(huì)多出一個(gè)線程,設(shè)定新線程進(jìn)入 “就緒” 狀態(tài),等待 CPU 調(diào)度之后才會(huì)執(zhí)行
這時(shí)才有和主線程爭(zhēng)cpu。
而下一個(gè) System.out.print() 幾乎(概率大于99%)可以認(rèn)為是立即接著執(zhí)行的。
所以,最終效果就是,幾乎都是 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.? 這句話注釋掉和不注釋掉的區(qū)別,或者更改sleep里面時(shí)間的區(qū)別
} catch (InterruptedException e) {
e.printStackTrace();
}
pong();
}
};
t.start();// 換成t.run(),觀察不同一般在筆試題中是陷阱,混淆start
mThread.sleep(250);// 2.? 這句話注釋掉和不注釋掉的區(qū)別,或者更改sleep里面時(shí)間的區(qū)別
System.out.println("ping");
}
static void pong() {
System.out.println("pong");
}
}
輸出pingpong和pongping都有可能
總結(jié)
以上是生活随笔為你收集整理的java pingpong_面试题。线程pingpong的输出问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 计算机程序的建立命令,数控车床编程指令
- 下一篇: 斯皮尔 皮尔森 肯德尔_一起来学应用统计