zoukankan      html  css  js  c++  java
  • java 多线程 day14 Semaphore 线程信号灯


    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.Semaphore;

    /**
    * Created by chengtao on 17/12/5.
    */
    public class Thread1401_Semaphore {
    public static void main(String[] args) {
    ExecutorService service = Executors.newCachedThreadPool();
    final Semaphore sp = new Semaphore(3); //单个信号灯 即实现线程互斥
    for(int i=0;i<10;i++){
    Runnable runnable = new Runnable(){
    public void run(){
    try {
    sp.acquire();
    } catch (InterruptedException e1) {
    e1.printStackTrace();
    }
    System.out.println("线程" + Thread.currentThread().getName() +
    "进入,当前已有" + (3-sp.availablePermits()) + "个并发");
    try {
    Thread.sleep((long)(Math.random()*10000));
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    System.out.println("线程" + Thread.currentThread().getName() +
    "即将离开");
    sp.release();
    //下面代码有时候执行不准确,因为其没有和上面的代码合成原子单元
    System.out.println("线程" + Thread.currentThread().getName() +
    "已离开,当前已有" + (3-sp.availablePermits()) + "个并发");
    }
    };
    service.execute(runnable);
    }
    }

    }

  • 相关阅读:
    UITabBarController资料
    lintcode157 判断字符串是否没有重复字符
    设置TabBarItem选中时的图片及文字颜色
    扩展UIColor类
    设置UINavigationController相同标题
    iOS打开手机QQ与指定用户聊天界面
    UIWindow
    Google Test资料
    Xcode集成Google Test
    文章索引
  • 原文地址:https://www.cnblogs.com/ctaixw/p/7980496.html
Copyright © 2011-2022 走看看