synchronized 方法的缺陷:若将一个大的方法声明为synchronized 将会大大影响效率,典型地,若将线程类的方法 run() 声明为 synchronized ,由于在线程的整个生命期内它一直在运行,因此将导致它对本类任何 synchronized 方法的调用都永远不会成功。
请问谁能代码解释下,我没搞明白,谢谢了.
------解决思路----------------------
你可以这么想象一下 : 某个高速收费口只有一个窗口, 这个窗口就是被要求同步的对象, 这样,所有车子过来的时候只能等前面一个处理完才能后面的继续前进。
------解决思路----------------------
synchronized方法只能被一个线程调用,同时拥有该方法的对象被锁定,这样其他线程调用该对象上的其他synchronized方法就会被阻塞,如果先前的方法运行时间比较长(也就是你说的大),这样其他线程就会一直被阻塞,所以效率低。至于线程的run方法被声明为synchronized方法,其他的synchronized方法将不能被任何线程调用,因为run一直在运行,但可以由自己调用,可以参考http://blog.csdn.net/skywalker_only/article/details/38927919