weixin_38502395
weixin_38502395
2021-05-05 11:07
采纳率: 25%
浏览 42
已采纳

多线程this关键字问题

为什么输出this对象不一样,而用lambda表达式输出就一样

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • benbenli
    benbenli 2021-05-06 11:58
    已采纳

    运行效果等价,但是语法不等价。

    lambda表达式定义了一个匿名函数,它没有参数,没有返回值。这个函数于Runnable要求的函数 void run()接口相同,所以可以付给Runnable。这里并没有定义一个新的类。

     

    附注:求赞助积分和C币。加入CSDN将近20年了。最近几年忙小孩没登录。刚才搜索到一本电子书想下载,需要20积分/C币。赞助多少都可以。多谢。

    点赞 评论
  • benbenli
    benbenli 2021-05-05 12:20

    第一个图片里代码,每个线程里 new Runnable() { .... } 定义了一个匿名类(是Runnable的子类),所以里面的this其实是这个匿名类的对象的地址。3个线程分别定义了3个不同的匿名类,虽然代码是一样的,但是是不同的类。它们的对象地址当然也不同。

     

    第三个图片就只有一个类,没有定义新的类。所以这些this就是同一个对象。

     

    要避免图一里的坑,好的编码风格是在函数testThis里第一行就记录自己的地址 Object self = this; 然后后面代码里全用self,避免 this坑。 

    点赞 评论

相关推荐