1. 程式人生 > >Java基礎面試:集合、內部類、線程

Java基礎面試:集合、內部類、線程

public 死鎖 exceptio read 多線程 三種 xtend arraylist 表示

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基礎面試:集合、內部類、線程