这个是生命周期问题,举例说明:
public static void main(String args[]){
final MyQueue mq = new MyQueue(5);
Thread t1 = new Thread(new Runnable() { @Override public void run() {
try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } mq.put("f"); mq.put("g"); } },"t1");
t1 .start();
}
这里如果不用final修饰,那么主线程结束的时候t1县城还在等待,但是mq的生命周期已经结束,为了避免这种情况发生,要用final修饰,此时我个人观点,new的线程把mq当作了自己的变量;