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, 为什么两个线程会出现同步执行的情况呢?
实际上是异步执行的, 只是我一开始程序打印的语句是相同的, 导致我以为是同步执行, 不好意思...
Thread.sleep(1000)变成100试试