1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
public class {
public static void main(String[] args) { AlternateDemo ad = new AlternateDemo(); new Thread(new Runnable() { public void run() { for (int i = 1; i <= 20; i++) { ad.loopA(i); } } }, "A").start();
new Thread(new Runnable() { public void run() {
for (int i = 1; i <= 20; i++) { ad.loopB(i); } } }, "B").start();
new Thread(new Runnable() { public void run() {
for (int i = 1; i <= 20; i++) { ad.loopC(i); System.out.println("-----------------------------------"); }
} }, "C").start(); }
}
class AlternateDemo{
private int number = 1;
private Lock lock = new ReentrantLock(); private Condition condition1 = lock.newCondition(); private Condition condition2 = lock.newCondition(); private Condition condition3 = lock.newCondition();
public void loopA(int totalLoop){ lock.lock();
try { if(number != 1){ condition1.await(); }
for (int i = 1; i <= 1; i++) { System.out.println(Thread.currentThread().getName() + "t" + i + "t" + totalLoop); }
number = 2; condition2.signal(); } catch (Exception e) { e.printStackTrace(); } finally { lock.unlock(); } }
public void loopB(int totalLoop){ lock.lock();
try { if(number != 2){ condition2.await(); }
for (int i = 1; i <= 1; i++) { System.out.println(Thread.currentThread().getName() + "t" + i + "t" + totalLoop); }
number = 3; condition3.signal(); } catch (Exception e) { e.printStackTrace(); } finally { lock.unlock(); } }
public void loopC(int totalLoop){ lock.lock();
try { if(number != 3){ condition3.await(); }
for (int i = 1; i <= 1; i++) { System.out.println(Thread.currentThread().getName() + "t" + i + "t" + totalLoop); }
number = 1; condition1.signal(); } catch (Exception e) { e.printStackTrace(); } finally { lock.unlock(); } }
}
|
近期评论