Java實現流控-Semaphore
阿新 • • 發佈:2018-12-23
網上類似文章很多,不多說,直接上程式碼:
- /**
- * 流控類(Semaphore實現)
- *
- * @author ln
- *
- */
- publicclass FlowControl {
- /**
- * 最大訪問量
- */
- privatestaticfinalint MAX_ACCESS_COUNT = 20;
- /**
- * 只能有MAX_ACCESS_COUNT個執行緒數同時訪問
- */
- privatestaticfinal Semaphore semaphore = new Semaphore(MAX_ACCESS_COUNT);
- public
- // 執行緒池
- ExecutorService exec = Executors.newCachedThreadPool();
- // 模擬30個客戶端
- for (int i = 0; i < 30; i++) {
- Runnable run = new Runnable() {
- @Override
- publicvoid run() {
- try {
- // 1秒鐘內得不到許可,則丟棄訪問。
- if (semaphore.tryAcquire(1, TimeUnit.SECONDS)) {
- System.out.println("正在執行...");
- //做一些事情...
- Thread.sleep(2 * 1000);
- System.out.println("執行完畢!"
- } else {
- System.out.println("訪問被拒絕!!!");
- }
- } catch (InterruptedException e) {
- e.printStackTrace();
- } finally {
- // 執行完成,釋放許可。
- semaphore.release();
- }
- }
- };
- exec.execute(run);
- }
- // 關閉執行緒池
- exec.shutdown();
- }
- }
轉自 : https://blog.csdn.net/hyxhbj1/article/details/72847048