这是一个关于线程的问题:
如果一个在main()方法里定义了一个sleep()比如一秒,而线程运行一个用 synchronized 修饰的 run() 。run()主要是对一个数字进行递增,并且递增后进行sleep()100毫秒(按照这个设定,通过无限循环,也就是说每个线程最多可以递增10次)。在main()中是以for循环5次来 execute()线程的,那么为什么结果会是,5个线程分别都递增了10次(因为run()方法被synchronized修饰了,所以只要当前线程没有解锁,其他线程又怎么能访问呢?)?

解决方案 »

  1.   

    http://topic.csdn.net/u/20080920/11/7c6d5b8f-26ab-4b62-a441-57fd91577304.html
    具体代码,我怕你们不肯看。
      

  2.   

    怀疑楼主没理解 synchronize(同步)的意思。同步的方法如果是静态的,那么是全局同步;如果是实例方法,那么仅针对其所属的对象进行同步。同步只是影响线程执行的时间,并不会终止或取消线程的执行。所以既然代码里每个线程递增 10 次,那么运行时每个线程就会递增 10 次。