zoukankan      html  css  js  c++  java
  • Semaphore拿到执行权的线程之间是否互斥

    java线程之间的控制,使用Semaphore 实现 互斥

    下面我们通过Semaphore来实现一个比较好的互斥操作:

    package com.zhy.concurrency.semaphore;  
      
    import java.util.concurrent.Semaphore;  
      
    /** 
     * 使用信号量机制,实现互斥访问打印机 
     *  
     *  
     */  
    public class MutexPrint  
    {  
      
        /** 
         * 定义初始值为1的信号量 
         */  
        private final Semaphore semaphore = new Semaphore(1);  
      
        /** 
         * 模拟打印操作 
         * @param str 
         * @throws InterruptedException 
         */  
        public void print(String str) throws InterruptedException  
        {  
            //请求许可  
            semaphore.acquire();  
              
            System.out.println(Thread.currentThread().getName()+" enter ...");  
            Thread.sleep(1000);  
            System.out.println(Thread.currentThread().getName() + "正在打印 ..." + str);  
            System.out.println(Thread.currentThread().getName()+" out ...");  
            //释放许可  
            semaphore.release();  
        }  
      
        public static void main(String[] args)  
        {  
            final MutexPrint print = new MutexPrint();  
      
            /** 
             * 开启10个线程,抢占打印机 
             */  
            for (int i = 0; i < 10; i++)  
            {  
                new Thread()  
                {  
                    public void run()  
                    {  
                        try  
                        {  
                            print.print("helloworld");  
                        } catch (InterruptedException e)  
                        {  
                            e.printStackTrace();  
                        }  
                    };  
                }.start();  
            }  
      
        }  
      
    }

    输出结果:

    Thread-1 enter ...  
    Thread-1正在打印 ...helloworld  
    Thread-1 out ...  
    Thread-2 enter ...  
    Thread-2正在打印 ...helloworld  
    Thread-2 out ...  
    Thread-0 enter ...  
    Thread-0正在打印 ...helloworld  
    Thread-0 out ...  
    Thread-3 enter ...  
    Thread-3正在打印 ...helloworld  
    Thread-3 out ...  
  • 相关阅读:
    CMMI的5个级别
    ubuntu下的烧录工具
    Git 安装配置
    使用 Git & Repo 下载代码
    Git 忽略文件
    Git rebase
    使用Git进行本地提交后,未上传提交,却不小心删除了本地提交或提交所在分支,怎么办?????
    Repo
    IOS关于UIViewController之间的切换
    PresentModalViewController
  • 原文地址:https://www.cnblogs.com/liuqing576598117/p/11168846.html
Copyright © 2011-2022 走看看