Scala final vs val for concurrency visibility

后端 未结 2 1646
灰色年华
灰色年华 2020-12-05 02:42

In Java, when using an object across multiple threads (and in general), it is good practice to make fields final. For example,

public class ShareMe {
    pr         


        
2条回答
  •  醉酒成梦
    2020-12-05 03:28

    I think I may have misunderstood how var is compiled. I created the sample class

    class AVarTest(name:String) {
       def printName() {
         println(name)
       }
    }
    

    I ran javap -private and it resulted in

    public class AVarTest extends java.lang.Object implements scala.ScalaObject{
        private final java.lang.String name;
        public void printName();
        public AVarTest(java.lang.String);
    }
    

    And name is actually compiled to final.

    This is also shown in Scala val has to be guarded with synchronized for concurrent access?

提交回复
热议问题