java 使用String对象作为锁使用?
PHP中文网
PHP中文网 2017-04-18 09:32:01
[Java讨论组]
  public class StringRunnable implements Runnable
{
private String str ;
private String str2 ;

public StringRunnable(String str , String str2) {
    this.str = str;
    this.str2=  str2 ;
}

@Override
public void run() {
    synchronized (str)
    {
        for(int i=0 ; i<1000000 ; i++)
        {
            System.out.println(str2);
            try {
                Thread.sleep(1000);
            }catch (Exception e)
            {

            }
        }
    }
}

public static void main(String[] args) {
    String str = "abcd";   //存储在constant pool中
    String str1 = "abc" ;    //存储在constant pool中

    String str2 = str1 +"d";  //str1 为非常量表达式,编译器不优化

    System.out.println(str == str2);
    StringRunnable stringRunnable1 = new StringRunnable(str , "xx") ;
    StringRunnable stringRunnable2 = new StringRunnable(str2 , "yy") ;

    Thread thread1 = new Thread(stringRunnable1) ;
    Thread thread2= new Thread(stringRunnable2) ;

    thread1.start() ;
    thread2.start() ;

}
}

str和str2不是同一个str, 为什么两个线程会出现同步执行的情况呢?


实际上是异步执行的, 只是我一开始程序打印的语句是相同的, 导致我以为是同步执行, 不好意思...

PHP中文网
PHP中文网

认证0级讲师

全部回复(1)
怪我咯

Thread.sleep(1000)变成100试试

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号