Java允许多个线程同时访问信号量(Semaphore)
1 示例:仅允许一个线程访问runs()方法 2 3 package com.thread.dome; 4 5 import java.util.concurrent.Semaphore; 6 7 import org.junit.Test; 8 9 public class SemaphoreTest { 10 11 private Semaphore semaphor = new Semaphore(1);// 12 volatile int count = 0; 13 14 public void runs() { 15 try { 16 semaphor.acquire();//获取信号,禁止其他线程进入 17 System.out.println(Thread.currentThread().getName() + ":进來了"); 18 19 //System.out.println(Thread.currentThread().getName() +":"+ (count++)); 20 System.out.println(Thread.currentThread().getName() + ":出去了"); 21 semaphor.release();//释放信号,允许其他线程进入 22 23 } catch (InterruptedException e) { 24 25 } 26 27 } 28 29 @Test 30 public void testT() { 31 32 for (int i = 0; i < 10; i++) { 33 34 new Thread(new Runnable() { 35 36 @Override 37 public void run() { 38 39 runs(); 40 } 41 }).start(); 42 43 44 45 46 } 47 48 } 49 50 } 51 52 运行结果: 53 Thread-0:进來了 54 Thread-0:出去了 55 Thread-1:进來了 56 Thread-1:出去了 57 Thread-6:进來了 58 Thread-6:出去了 59 Thread-5:进來了 60 Thread-5:出去了 61 Thread-9:进來了 62 Thread-9:出去了 63 Thread-2:进來了 64 Thread-2:出去了 65 Thread-4:进來了 66 Thread-4:出去了 67 Thread-8:进來了 68 Thread-8:出去了 69 70 71 示例2,允许多个线程同时访问runs()方法 72 package com.thread.dome; 73 74 import java.util.concurrent.Semaphore; 75 76 import org.junit.Test; 77 78 public class SemaphoreTest { 79 80 private Semaphore semaphor = new Semaphore(5);//允许同时并发调用runs()方法的个数 81 volatile int count = 0; 82 83 public void runs() { 84 try { 85 semaphor.acquire();//获取信号,允许其他线程同时访问,不能超过5 86 System.out.println(Thread.currentThread().getName() + ":进來了"); 87 88 //System.out.println(Thread.currentThread().getName() +":"+ (count++)); 89 System.out.println(Thread.currentThread().getName() + ":出去了"); 90 semaphor.release();//释放信号 91 92 } catch (InterruptedException e) { 93 94 } 95 96 } 97 98 @Test 99 public void testT() { 100 101 for (int i = 0; i < 100; i++) { 102 103 new Thread(new Runnable() { 104 105 @Override 106 public void run() { 107 108 runs(); 109 } 110 }).start(); 111 112 113 114 115 } 116 117 } 118 119 } 120 121 运行结果: 122 Thread-0:进來了 123 Thread-1:进來了 124 Thread-1:出去了 125 Thread-2:进來了 126 Thread-2:出去了 127 Thread-0:出去了 128 Thread-5:进來了 129 Thread-5:出去了 130 Thread-6:进來了 131 Thread-6:出去了 132 Thread-4:进來了 133 Thread-4:出去了 134 Thread-7:进來了 135 Thread-7:出去了 136 Thread-8:进來了 137 Thread-8:出去了 138 Thread-11:进來了 139 Thread-11:出去了 140 Thread-12:进來了 141 Thread-12:出去了 142 Thread-14:进來了 143 Thread-14:出去了 144 Thread-3:进來了 145 Thread-3:出去了 146 Thread-9:进來了 147 Thread-9:出去了 148 Thread-13:进來了 149 Thread-13:出去了 150 Thread-25:进來了 151 Thread-25:出去了 152 Thread-18:进來了 153 Thread-18:出去了 154 Thread-22:进來了 155 Thread-22:出去了 156 Thread-10:进來了 157 Thread-10:出去了 158 Thread-26:进來了 159 Thread-26:出去了 160 Thread-29:进來了 161 Thread-29:出去了 162 Thread-30:进來了 163 Thread-30:出去了 164 Thread-15:进來了 165 Thread-15:出去了 166 Thread-16:进來了 167 Thread-16:出去了 168 Thread-19:进來了 169 Thread-19:出去了 170 Thread-33:进來了 171 Thread-33:出去了 172 Thread-34:进來了 173 Thread-34:出去了 174 Thread-20:进來了 175 Thread-20:出去了 176 Thread-23:进來了 177 Thread-21:进來了 178 Thread-21:出去了 179 Thread-17:进來了 180 Thread-17:出去了 181 Thread-24:进來了 182 Thread-24:出去了 183 Thread-23:出去了 184 Thread-27:进來了 185 Thread-27:出去了 186 Thread-37:进來了 187 Thread-37:出去了 188 Thread-38:进來了 189 Thread-38:出去了 190 Thread-28:进來了 191 Thread-28:出去了 192 Thread-41:进來了 193 Thread-41:出去了 194 Thread-42:进來了 195 Thread-42:出去了 196 Thread-31:进來了 197 Thread-31:出去了 198 Thread-45:进來了 199 Thread-45:出去了 200 Thread-32:进來了 201 Thread-32:出去了 202 Thread-46:进來了 203 Thread-46:出去了 204 Thread-49:进來了 205 Thread-49:出去了 206 Thread-50:进來了 207 Thread-50:出去了 208 Thread-54:进來了 209 Thread-54:出去了 210 Thread-58:进來了 211 Thread-58:出去了 212 Thread-62:进來了 213 Thread-61:进來了 214 Thread-62:出去了 215 Thread-51:进來了
posted on 2018-08-08 21:05 Mature1021 阅读(220) 评论(0) 收藏 举报
浙公网安备 33010602011771号