Java基礎面試:集合、內部類、線程
package test; import java.util.Hashtable; import java.util.Map; public class test { public static String change(String param){ param=null; return param; } public static void main(String[] args) { String param1="p1"; param1=change(param1); Map table1=new Hashtable(); table1.put(param1, "pv1"); System.out.println(table1.get("p1")); } } /** * Exception in thread "main" java.lang.NullPointerException at java.util.Hashtable.put(Hashtable.java:399) at test.test.main(test.java:15) */
2.
package test; import java.util.ArrayList; import java.util.List; public class Test2 { public static void main(String[] args) { List list = new ArrayList(); list.add("1"); list.add("3"); list.add("4"); for(Object o : list){ if ("3".equals(o)) { list.remove(o); } } for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } } }
執行輸出:
1
4
3.接口是能夠new的
package test; public class Outer { public void instanceMethod() { Action action = new Action() { @Override public void doAction() { // TODO Auto-generated method stub System.out.println("error"); } }; action.doAction(); new DataClass(5){ public void printData() {//該方法未被調用 System.out.println("data="+getData()); } }; } public static void main(String[] args) { // TODO Auto-generated method stub new Outer().instanceMethod(); } } interface Action{ void doAction(); } class DataClass{ private int data; public DataClass (int data) { this.data=data; } public int getData() { return data; } }
執行輸出:
error
4.java多線程都有幾種方式實現?
有三種:
(1)繼承Thread類,重寫run函數
創建:
class xx extends Thread{
public void run(){
Thread.sleep(1000) //線程休眠1000毫秒,sleep使線程進入Block狀態,並釋放資源
}}
開啟線程:
對象.start() //啟動線程。run函數執行
(2)實現Runnable接口,重寫run函數
開啟線程:
Thread t = new Thread(對象) //創建線程對象
t.start()
(3)實現Callable接口,重寫call函數
Callable是類似於Runnable的接口,實現Callable接口的類和實現Runnable的類都是可被其他線程運行的任務。
Callable和Runnable有幾點不同:
①Callable規定的方法是call(),而Runnable規定的方法是run().
②Callable的任務運行後可返回值,而Runnable的任務是不能返回值的
③call()方法可拋出異常,而run()方法是不能拋出異常的。
④執行Callable任務可拿到一個Future對象。Future表示異步計算的結果。它提供了檢查計算是否完畢的方法,以等
待計算的完畢,並檢索計算的結果.通過Future對象可了解任務運行情況,可取消任務的運行,還可獲取任務運行的結果
5.Java線程同步,是什麽意思?
一種是方法前加sychronized
public void sychronized start() {
System.out.println("start");
}
還有一種是在代碼段之前加sychronized
(sychronized){
。
。。
。。
}
同步方法(synchronizedkeyword修飾的方法)能夠較好地解決並發問題,在一定程度上能夠避免出現資源搶占、競爭條件和死鎖的情況。但其副作用是同步鎖可導致線程堵塞。這要求同步方法的運行時間不能太長。
這就是所謂的鎖機制。你何以使用sychronized(Object obj)鎖住某個對象。等你使用完這個對象之後,再進行鎖的釋放。其它須要該對象的線程才幹夠運行。
Java基礎面試:集合、內部類、線程