同步计数器Semaphore

Semaphore作为同步计数器,作用主要是控制线程可执行的数量。

下面是一个实例,比如一台服务器,只允许三个客户端同时访问,现在来了10个客户端:


package com.lin.test;

import java.util.concurrent.Semaphore;

public class SemaphoreTest {
    
    public static void main(String[] args) {
        
        final Semaphore semaphore = new Semaphore(3);
        
        for(int i=0;i<10;i++){
            final int no = i;
            Runnable thread = new Runnable() {
                @Override
                public void run() {
                    try {
                        System.out.println("客户端"+no+"连上了。。。");
                        semaphore.acquire();//获取接下来执行的许可
                        Thread.sleep(3000);//模拟服务器处理请求的时间
                        System.out.println("客户端"+no+"访问结束。。。");
                    } catch (Exception e) {
                        
                    }
                    finally{
                        semaphore.release();//释放允许下一个线程访问
                    }
                }
            };
            new Thread(thread).start();
        }
    }

}


你可能感兴趣的:(java,多线程)