Java并發編程在當今的軟件工程中發揮著非常重要的作用。越來越多的軟件公司都將Java并發編程看作是崗位應聘的必要條件之一,因此,很多面試官也會考查應聘者的Java并發編程知識。下面,我們就來看一看一些常見的Java并發面試題以及它們的答案。
public class MyRunnable implements Runnable{ public void run(){ for(int i=0; i<5; i++){ System.out.println(Thread.currentThread().getName() + "在執行" + i); } } public static void main(String[] args){ MyRunnable mr = new MyRunnable(); Thread t1 = new Thread(mr); Thread t2 = new Thread(mr); t1.start(); t2.start(); } }
這是一個簡單的Java并發程序,它的運行結果會是什么?
答案:無法確定。
原因:這是一個多線程程序,t1和t2兩個線程是同時運行的,因此每次運行的結果都是不確定的。
public class MyThread extends Thread{ private int count = 5; public MyThread(String name){ super(); this.setName(name); } public void run(){ super.run(); while(count >0){ count--; System.out.println("由" + Thread.currentThread().getName() + "計算,count=" + count); } } } public static void main(String[] args){ MyThread t1 = new MyThread("A"); MyThread t2 = new MyThread("B"); MyThread t3 = new MyThread("C"); t1.start(); t2.start(); t3.start(); }
這個程序的運行結果是什么?
答案:無法確定。
原因:三個線程的運行順序是隨機的,每次執行的結果都是不確定的。
public class MyRunnable implements Runnable{ private int count = 3; public void run(){ synchronized(this){ while(count >0){ count--; System.out.println(Thread.currentThread().getName() + " count = " + count); } } } public static void main(String[] args){ MyRunnable mr = new MyRunnable(); Thread t1 = new Thread(mr, "A"); Thread t2 = new Thread(mr, "B"); Thread t3 = new Thread(mr, "C"); t1.start(); t2.start(); t3.start(); } }
這個程序的運行結果是什么?
答案:A B C。
原因:synchronized關鍵字鎖住的是對象,t1,t2,t3使用的是同一個對象,因此只有一個線程能夠訪問count變量,因此輸出的結果是ABC。
Java并發編程領域非常廣,需要學習的知識點也很多,想要在面試中獲得成功,需要不斷學習并掌握更多的知識。
上一篇php 5.2 5.4
下一篇adobe水印php