从上面的输出结果中我们不难看出出现了严重的交错现象! 在increment或者是decrement方法中输出before和after本应该是成对连续出现的。但输出结果却不是如此。

  将上面代码的increment()和decrement()方法用synchronized 修饰后,重新运行该程序,输出结果如下:

  before increment, c = 0
  after increment, c = 1
  before increment, c = 1
  after increment, c = 2
  before decrement, c = 2
  after decrement, c = 1
  before increment, c = 1
  after increment, c = 2
  before decrement, c = 2
  after decrement, c = 1
  before decrement, c = 1
  after decrement, c = 0
  before decrement, c = 0
  after decrement, c = -1
  before decrement, c = -1
  after decrement, c = -2
  before increment, c = -2
  after increment, c = -1
  before decrement, c = -1
  after decrement, c = -2
  before decrement, c = -2
  after decrement, c = -3
  before decrement, c = -3
  after decrement, c = -4
  before decrement, c = -4
  after decrement, c = -5
  before increment, c = -5
  after increment, c = -4
  before decrement, c = -4
  after decrement, c = -5
  before increment, c = -5
  after increment, c = -4
  before increment, c = -4
  after increment, c = -3
  before increment, c = -3
  after increment, c = -2
  before increment, c = -2
  after increment, c = -1
  before increment, c = -1
  after increment, c = 0

  这样输出结果和没有增加synchronized修饰符时的大不相同:单独一次的increment和decrement方法并没有出现交错的现象。只是连续10次的increment()和decrement ()有交错(这个不是synchronized能解决的问题)。

  至少,我们从上面的实例程序中可以看到synchronized方法的作用了。

  另外,我们还可以使用同步语句(也是使用Counter对象的同步锁)来代替上面的同步方法,其效果是一样的。有兴趣的网友可以自己尝试一下。