zoukankan      html  css  js  c++  java
  • 并发编程(五)__Lock 同步锁


             用于解决多线程安全问题的方式:

         synchronized:隐式锁
         1. 同步代码块

         2. 同步方法

        jdk 1.5 后:
        3. 同步锁 Lock
          注意:是一个显示锁,需要通过 lock() 方法上锁,必须通过 unlock() 方法进行释放锁

    import java.util.concurrent.locks.Lock;
    import java.util.concurrent.locks.ReentrantLock;
    
    /*
     * 一、用于解决多线程安全问题的方式:
     * 
     * synchronized:隐式锁
     * 1. 同步代码块
     * 
     * 2. 同步方法
     * 
     * jdk 1.5 后:
     * 3. 同步锁 Lock
     * 注意:是一个显示锁,需要通过 lock() 方法上锁,必须通过 unlock() 方法进行释放锁
     */
    public class TestLock {
        
        public static void main(String[] args) {
            Ticket ticket = new Ticket();
            
            new Thread(ticket, "1号窗口").start();
            new Thread(ticket, "2号窗口").start();
            new Thread(ticket, "3号窗口").start();
        }
    
    }
    
    class Ticket implements Runnable{
        
        private int tick = 100;
        
        private Lock lock = new ReentrantLock();
    
        @Override
        public void run() {
            while(true){
                
                lock.lock(); //上锁
                
                try{
                    if(tick > 0){
                        try {
                            Thread.sleep(200);
                        } catch (InterruptedException e) {
                        }
                        
                        System.out.println(Thread.currentThread().getName() + " 完成售票,余票为:" + --tick);
                    }
                }finally{
                    lock.unlock(); //释放锁
                }
            }
        }
        
    }
    纸上学来终觉浅,觉知此事需躬行
  • 相关阅读:
    POJ:3126-Prime Path
    Linux用户操作及权限
    Web前段开发人员须知的常见浏览器兼容性问题及解决技巧
    windows激活
    未来十年最具有潜力的行业
    WebStorm激活码存储
    5种关系型数据库
    linux常用命令总结
    进程、线程、多线程的总结
    C++类库
  • 原文地址:https://www.cnblogs.com/dreamHighMjc/p/8497278.html
Copyright © 2011-2022 走看看