Java在new一个线程时使用的变量一定要用final修饰吗

这个是生命周期问题,举例说明:

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当作了自己的变量;

你可能感兴趣的:(a)