秒杀多线程第八篇 经典线程同步 信号量Semaphore (续)

java semaphore实现:

Semaphore当前在多线程环境下被扩放使用,操作系统的信号量是个很重要的概念,在进程控制方面都有应用。Java 并发库 的Semaphore 可以很轻松完成信号量控制,Semaphore可以控制某个资源可被同时访问的个数,通过 acquire() 获取一个许可,如果没有就等待,而 release() 释放一个许可。比如在Windows下可以设置共享文件的最大客户端访问个数。

 

package com.multithread.semaphore;

import java.util.concurrent.Semaphore;

import com.multithread.main.ExampleInterface;

/**
 * semaphore 可以控制某个资源被同时使用的个数。
 * 通过 acquire()获得许可,没有就等待。
 * release() 释放一个许可。
 * 
 * */
public class SemaphoreExample extends ExampleInterface{
    
    final Semaphore sema = new Semaphore(1);
    int g_num = 0;
    @Override
    public void startDemo() {

        for(int i=0;i<10;i++)
        {
            Thread se = new SemaMultiThread(i,sema);
            se.start();
        }
        
    }
    
    
    
    
    @Override
    public void startDemo2() {
        final Semaphore _lsema = new Semaphore(10);
        for(int i=0;i<50;i++)
        {
            Thread se = new SemaMultiThread(i,_lsema);
            se.start();
        }
    }




    class SemaMultiThread extends Thread {
        
        int index = -1;
        Semaphore mSema = null;
        public SemaMultiThread(int i,Semaphore se) {
            this.index = i;
            mSema = se;
        }

        @Override
        public void run() {
            try {
                mSema.acquire();
                System.out.println("index:"+this.index);
                Thread.sleep((long) (Math.random()*100));
                mSema.release();
                System.out.println("----------------:"+mSema.availablePermits());
                Thread.sleep((long) (Math.random()*100));
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }
}

 

可以使每个线程互斥: final Semaphore sema = new Semaphore(1);

Semaphore _lsema = new Semaphore(10); 同时有最大10个线程在运行,与线程池的效果类似!

 

转载于:https://www.cnblogs.com/deman/p/4076463.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值