分析:线程之间要共享变量(j)
代码:
1 /** 2 * 3 */ 4 package bsms.base; 5 6 /** 7 * @author sunny 8 * 9 */ 10 public class Base55 { 11 private int j; 12 13 /** 14 * @param args 15 */ 16 public static void main(String[] args) { 17 Base55 t = new Base55(); 18 for (int i = 0; i < 2; i++) { 19 Runnable at = t.new Add(); 20 Runnable st = t.new Sub(); 21 new Thread(at, "Add-" + i).start(); 22 new Thread(st, "Sub-" + i).start(); 23 } 24 } 25 26 private synchronized void add() { 27 System.out.println(Thread.currentThread().getName() + ",j=" + ++j); 28 try { 29 Thread.sleep(100); 30 } catch (InterruptedException e) { 31 // TODO Auto-generated catch block 32 e.printStackTrace(); 33 } 34 } 35 36 private synchronized void sub() { 37 System.out.println(Thread.currentThread().getName() + ",j=" + --j); 38 try { 39 Thread.sleep(100); 40 } catch (InterruptedException e) { 41 // TODO Auto-generated catch block 42 e.printStackTrace(); 43 } 44 } 45 46 private class Add implements Runnable { 47 @Override 48 public void run() { 49 // for (int i = 0; i < 100; i++) { 50 // add(); 51 // } 52 while(true){ 53 add(); 54 } 55 } 56 } 57 58 private class Sub implements Runnable { 59 @Override 60 public void run() { 61 // for (int i = 0; i < 100; i++) { 62 // sub(); 63 // } 64 while(true){ 65 sub(); 66 } 67 } 68 } 69 70 }
效果:
1 Add-0,j=1 2 Sub-1,j=0 3 Sub-1,j=-1 4 Sub-1,j=-2 5 Sub-1,j=-3 6 Add-1,j=-2 7 Add-1,j=-1 8 Add-1,j=0 9 Sub-0,j=-1 10 Add-1,j=0 11 Add-1,j=1 12 Sub-1,j=0 13 Sub-1,j=-1 14 Sub-1,j=-2 15 Sub-1,j=-3 16 Sub-1,j=-4 17 Sub-1,j=-5 18 Sub-1,j=-6 19 Add-0,j=-5 20 Sub-1,j=-6 21 Sub-1,j=-7 22 Sub-1,j=-8 23 Sub-1,j=-9 24 Sub-1,j=-10 25 Sub-1,j=-11 26 Add-1,j=-10 27 Add-1,j=-9 28 Add-1,j=-8 29 Add-1,j=-7 30 Sub-0,j=-8 31 Add-1,j=-7 32 Add-1,j=-6 33 Add-1,j=-5 34 Add-1,j=-4 35 Add-1,j=-3 36 Add-1,j=-2 37 Add-1,j=-1 38 Add-1,j=0 39 Add-1,j=1 40 Add-1,j=2 41 Add-1,j=3 42 Add-1,j=4 43 Add-1,j=5 44 Add-1,j=6 45 Add-1,j=7 46 Add-1,j=8 47 Add-1,j=9 48 Add-1,j=10 49 Add-1,j=11 50 Add-1,j=12 51 Add-1,j=13 52 Add-1,j=14 53 Add-1,j=15 54 Add-1,j=16 55 Add-1,j=17 56 Add-1,j=18 57 Add-1,j=19 58 Sub-1,j=18 59 Sub-1,j=17 60 Sub-1,j=16 61 Sub-1,j=15 62 Sub-1,j=14 63 Sub-1,j=13 64 Sub-1,j=12 65 Sub-1,j=11 66 Sub-1,j=10 67 Sub-1,j=9 68 Add-0,j=10 69 Add-0,j=11 70 Add-0,j=12 71 Add-0,j=13 72 Add-0,j=14 73 Add-0,j=15 74 Add-0,j=16 75 Add-0,j=17 76 Sub-1,j=16 77 Sub-1,j=15 78 Sub-1,j=14 79 Sub-1,j=13 80 Sub-1,j=12 81 Sub-1,j=11 82 Sub-1,j=10 83 Add-1,j=11 84 Add-1,j=12 85 Sub-0,j=11 86 Add-1,j=12 87 Add-1,j=13 88 Add-1,j=14 89 Add-1,j=15 90 Sub-1,j=14 91 Sub-1,j=13 92 Sub-1,j=12 93 Sub-1,j=11 94 Add-0,j=12 95 Add-0,j=13 96 Add-0,j=14 97 Add-0,j=15 98 Sub-1,j=14 99 Add-1,j=15 100 Sub-0,j=14 101 Sub-0,j=13 102 Sub-0,j=12 103 Sub-0,j=11 104 Sub-0,j=10 105 Add-1,j=11 106 Add-1,j=12 107 Sub-1,j=11 108 Add-0,j=12 109 Add-0,j=13 110 Add-0,j=14 111 Add-0,j=15 112 Sub-1,j=14 113 Sub-1,j=13 114 Add-1,j=14 115 Add-1,j=15 116 Sub-0,j=14 117 Add-1,j=15 118 Add-1,j=16 119 Add-1,j=17 120 Add-1,j=18 121 Add-1,j=19 122 Add-1,j=20 123 Add-1,j=21 124 Sub-1,j=20 125 Sub-1,j=19 126 Sub-1,j=18 127 Sub-1,j=17 128 Sub-1,j=16 129 Sub-1,j=15 130 Sub-1,j=14 131 Sub-1,j=13 132 Sub-1,j=12 133 Sub-1,j=11 134 Sub-1,j=10 135 Add-0,j=11 136 Add-0,j=12 137 Add-0,j=13 138 Add-0,j=14 139 Add-0,j=15 140 Add-0,j=16 141 Add-0,j=17 142 Add-0,j=18 143 Sub-1,j=17 144 Sub-1,j=16 145 Sub-1,j=15 146 Sub-1,j=14 147 Sub-1,j=13 148 Sub-1,j=12 149 Sub-1,j=11 150 Sub-1,j=10 151 Sub-1,j=9 152 Sub-1,j=8 153 Sub-1,j=7 154 Sub-1,j=6 155 Add-1,j=7 156 Add-1,j=8 157 Add-1,j=9 158 Sub-0,j=8 159 Add-1,j=9 160 Add-1,j=10 161 Add-1,j=11 162 Add-1,j=12 163 Add-1,j=13 164 Add-1,j=14 165 Sub-1,j=13 166 Sub-1,j=12 167 Sub-1,j=11 168 Sub-1,j=10 169 Sub-1,j=9 170 Sub-1,j=8 171 Sub-1,j=7 172 Sub-1,j=6 173 Sub-1,j=5 174 Sub-1,j=4 175 Add-0,j=5 176 Add-0,j=6 177 Add-0,j=7 178 Add-0,j=8 179 Add-0,j=9 180 Add-0,j=10 181 Add-0,j=11 182 Sub-1,j=10 183 Sub-1,j=9 184 Sub-1,j=8 185 Sub-1,j=7 186 Sub-1,j=6 187 Sub-1,j=5 188 Sub-1,j=4 189 Sub-1,j=3 190 Sub-1,j=2 191 Sub-1,j=1 192 Add-1,j=2 193 Add-1,j=3 194 Sub-0,j=2
.......只展示部分