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, 为什么两个线程会出现同步执行的情况呢?
实际上是异步执行的, 只是我一开始程序打印的语句是相同的, 导致我以为是同步执行, 不好意思...
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
Thread.sleep(1000)变成100试试