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 ...  
  • 相关阅读:
    wmware虚拟机的克隆
    解决SecureCRT无法用非root账号登录ssh
    Docker容器操作
    Docker镜像操作
    Docker的安装和启动
    linux安装tomcat
    POJ 2456 Aggressive cows ( 二分搜索)
    POJ 1064 Cable master (二分查找)
    2008 APAC local onsites C Millionaire (动态规划,离散化思想)
    贿赂囚犯 Bribe the prisoners ( 动态规划+剪枝)
  • 原文地址:https://www.cnblogs.com/liuqing576598117/p/11168846.html
Copyright © 2011-2022 走看看