被替換掉的同步
繼承體繫結構下父類的某個聲明為同步的方法是可以被更加具體的子類覆蓋並聲明為非同步。
樣本
/** * 父類的synchronized方法可以在子類中改變為非synchronized方法 * @author WangYanCheng * @version 2012-11-12 */public class SynExtends { public static void main(String[] args) { ParentClass pcInst = new SubClass();//new ParentClass(); Set<Integer> resultSets =Collections.synchronizedSet(new TreeSet<Integer>()); createThread(pcInst, resultSets); createThread(pcInst, resultSets); createThread(pcInst, resultSets); createThread(pcInst, resultSets); } public static void createThread(final ParentClass pcInst, final Set<Integer> valueSet) { new Thread(new Runnable() { public void run() { while (true) { Integer tmpI = pcInst.doWork(); if (!valueSet.add(tmpI)) { throw new IllegalStateException("資料狀態不正確,出現重複:".concat(tmpI.toString())); } try { Thread.sleep(100); } catch (InterruptedException ie) { ie.printStackTrace(); } } } }).start(); }}class ParentClass { private volatile int index; public synchronized Integer doWork() { return index++; }}class SubClass extends ParentClass { private int index; @Override public Integer doWork() { return index++; }}