1 4 package com.tctest.spring.bean; 5 6 import com.tc.aspectwerkz.proxy.Uuid; 7 8 import java.util.ArrayList ; 9 import java.util.List ; 10 11 17 public class SharedLockBean implements Runnable , ISharedLock { 18 private List sharedVar = new ArrayList (); 20 private Object sharedLock = new Object (); 21 23 private transient List unsharedVar = new ArrayList (); 25 private transient long localID = System.identityHashCode(this) + Uuid.newUuid(); 26 private transient volatile int stepId = 0; 27 28 public void start() { 29 Thread th = new Thread (this); 30 th.setDaemon(true); 31 th.start(); 32 } 33 34 public void moveToStep(int step) { 35 stepId = step; 36 try { 37 Thread.sleep(1000L); 39 } catch (Exception e) {e.printStackTrace();} 40 41 } 46 47 public void run() { 48 holdOnStep(10); try { 50 sharedVar.add("ckpoint1-" + localID); 51 } catch (Exception e) { 52 unsharedVar.add("ckpoint1-" + localID); 54 } 55 holdOnStep(20); synchronized(this.sharedLock) { 57 sharedVar.add("ckpoint2-" + localID); 58 holdOnStep(30); } holdOnStep(40); } 62 63 private void holdOnStep(int step) { 64 while (stepId < step) { 65 try { 66 Thread.sleep(100L); 67 } catch (Exception e) {e.printStackTrace();} 68 } 78 } 79 80 public List getSharedVar() { 82 return sharedVar; 83 } 84 85 public List gethUnSharedVar() { 86 return unsharedVar; 87 } 88 89 public long getLocalID() { 90 return localID; 91 } 92 } 93 | Popular Tags |