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 ...  
  • 相关阅读:
    《算法竞赛入门经典》(刘汝佳)——排序与检索(基础)
    Python中的GIL
    MongoDB 安装
    python3 报错集合
    socket 实例化方法
    socket入门
    Day_6作业_模拟人生
    高阶函数举例
    面向对象_python
    xml
  • 原文地址:https://www.cnblogs.com/liuqing576598117/p/11168846.html
Copyright © 2011-2022 走看看