日期:2014-05-20  浏览次数:20774 次

java 对象锁问题
class PingPong2 { 
synchronized void hit(long n) { 
for(int i = 1; i < 3; i++) 
System.out.print(n + "-" + i + " "); 


public class Tester implements Runnable { 
 PingPong2 pp2 = new PingPong2(); 
 
public static void main(String[] args) { 
new Thread(new Tester()).start(); 
new Thread(new Tester()).start(); 



public void run() 
{ pp2.hit(Thread.currentThread().getId()); } 
}

答案选项是:
        a) The output could be 5-1 6-1 6-2 5-2
b) The output could be 6-1 6-2 5-1 5-2
c) The output could be 6-1 5-2 6-2 5-1
d) The output could be 6-1 6-2 5-1 7-1
我用双核电脑运行了一下,a) b)都有可能。
我的疑问是:在单核cpu时,既然一个线程获得Pingpong2的对象锁,hit()函数运行完之前,锁不应该释放。运行结果应该是5-1 5-2 6-1 6-2 或者是6-1 6-2 5-1 5-2。会不会出现5-1 6-1 6-2 5-2的情况?
            而对于多核cpu,运行情况有什么不同吗?
java thread

------解决方案--------------------
不明白楼主为什么非要强调多核还是单核? 应该结果没区别吧?
5-1 6-1 6-2 5-2 我觉得是可以出现的。
需要注意的是 这个不是STAITC方法他锁的是对象 不是类, 你要注意2个线程他NEW了2个对象, 他们之间应该是不存在数据并发的问题的