胡良宇吧 关注:3贴子:27
  • 0回复贴,共1

破除java神话之四:同步代码等同于断面(critical section)(2)

只看楼主收藏回复

破除java神话之四:同步代码等同于断面(critical section) 

--------------------------------------------------------------------------------
 
http://Tech.acnow.net 2005-7-24 21:15:00 JR 
 


2、


class Foo extends Thread  

    private String name; 
    private String val; 
    public Foo(String name,String v)  
    {  
         this.name=name; 
         val = v;  
    }  
    public void printVal()  
    {  
        synchronized(val) {  
        while(true) System.out.println(name+val);  
        }  
    }  
    public void run()  
    {  
        printVal();  
    }  

public class SyncMethodTest  
{  
    public static void main(String args[])  
    {  
        Foo f1 = new Foo("Foo 1:","printVal");  
        f1.start();  
        Foo f2 = new Foo("Foo 2:","printVal"); 
        f2.start();  
    }  
}

上面这个代码需要进行一些额外的说明,因为JVM有一种优化机制,因为String类型的对象是不可变的,因此当你使用""的形式引用字符串时,如果JVM发现内存已经有一个这样的对象,那么它就使用那个对象而不再生成一个新的String对象,这样是为了减小内存的使用。
上面的main方法其实等同于:


     public static void main(String args[])  
    { 
        String value="printVal"; 
        Foo f1 = new Foo("Foo 1:",value);  
        f1.start();  
        Foo f2 = new Foo("Foo 2:",value); 
        f2.start();  
    }  

 



IP属地:四川1楼2006-09-05 15:27回复