黑马程序员-String的享元模式引发的线程问题

来源:互联网 发布:湖南省干部教育网络 编辑:程序博客网 时间:2024/05/16 14:11

----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------


public class Test {

         public static void main(String [] args){
         syn1 ss1=new syn1();
         syn2 ss2=new syn2();
         new Thread(ss1).start();
                 new Thread(ss1).start();
         new Thread(ss2).start();
}

}
class  syn1 implements Runnable{
    public String str1="";//new String("");//改成new String("");
    public void run() {
            synchronized(str1){
                    while(true){
                            try{Thread.sleep(1);}catch(Exception e){}
                            System.out.println("syn1:"+Thread.currentThread().getName());
                    }
            }
    }        
}
class  syn2 implements Runnable{
    public String str2="";//new String("");////改成new String("");
    public void run() {
            synchronized(str2){
                    while(true){
                            try{Thread.sleep(1);}catch(Exception e){}
                            System.out.println("syn2:"+Thread.currentThread().getName());
                    }
            }
    }
}
str1str2其实是同一个对象,在第一个线程运行时,对该对象上了锁,因此每二个线程阻塞等待。这样写str1=new String("")str2=new String("")就可以了

----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------