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当作了自己的变量;
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,类的成员变量使用`final`修饰和方法中的参数使用`final`修饰有以下区别: 1. 类的成员变量使用`final`修饰: - `final`修饰的成员变量表示该变量一个常量,一旦被赋值后就不能再修改。 - `final`成员变量必须在声明或构造函数中进行初始化,且不能再被赋新值。 - `final`成员变量在整个类的生命周期中保持不变,具有只读的特性。 2. 方法中的参数使用`final`修饰: - `final`修饰的方法参数表示该参数在方法内部不能再被修改。 - `final`参数主要用于保护方法内的参数值不被修改,一旦参数被赋值后,在方法中不能修改其值,避免了不经意间修改参数的风险。 - `final`参数通常用于提高代码的可读性和安全性。 一般情况下,对类的成员变量使用`final`修饰的情况包括: - 常量:当一个变量在整个类中都不应该被修改,可以使用`final`修饰,使其成为一个常量。 - 线程安全:当多个线程访问同一个对象,通过将共享的成员变量声明为`final`可以确保其在多线程环境下的安全性。 - 优化性能:编译器对`final`变量进行优化,可以提高程序的执行效率。 而对方法中的参数使用`final`修饰的情况包括: - 明确参数只用于读取,不应该被修改。 - 提高代码可读性,使方法的行为更加明确和可预测。 - 防止不经意间修改参数值,确保方法逻辑正确性和稳定性。 需要注意的是,使用`final`修饰并不是必须的,而是根据具体情况来考虑是否需要使用`final`来增加代码的可读性、安全性和性能优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值