我正在学习Java中的多线程。在教程中,它说去掉synchronized会使程序出现bug,实际上也确实如此。所以我进行了一些实验,写了一行代码:
我无法理解为什么添加一行打印代码就可以使其同步。
System.out.println(Thread.currentThread().getName() + " " +count);
并且去掉了synchronized关键字。即使这样,程序也能正常运行。但是如果仅仅去掉了synchronized关键字而没有加上printline(System.out.println(Thread.currentThread().getName() + " " +count);
),那么程序会出现预期的bug。我无法理解为什么添加一行打印代码就可以使其同步。
public class intro implements Runnable {
int n=10000;
private int count = 0;
public int getCount() { return count; }
public synchronized void incrSync() { count++; }
public void run () {
for (int i=0; i<n; i++) {
incrSync();
//System.out.println(Thread.currentThread().getName() + " " +count);
}
}
public static void main(String [] args) {
intro mtc = new intro();
Thread t1 = new Thread(mtc);
Thread t2 = new Thread(mtc);
t1.start();
t2.start();
try {
t1.join();
t2.join();
} catch (InterruptedException ie) {
System.out.println(ie);
ie.printStackTrace();
}
System.out.println("count = "+ mtc.getCount());
}
}
println
调用方法。 - 11thdimension