美文网首页
解决多线程安全问题的锁方式

解决多线程安全问题的锁方式

作者: 贾歌 | 来源:发表于2017-10-08 22:08 被阅读10次

    synchronized:隐式锁

    • 同步代码块
    • 同步方法
      示例代码,略。

    jdk 1.5 后,同步锁 Lock

    • 同步锁 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(20);
                        } catch (InterruptedException e) {
                        }
                        
                        System.out.println(Thread.currentThread().getName() + " 完成售票,余票为:" + --tick);
                    }else {
                        break;
                    }
    
                }finally{
                    lock.unlock(); //释放锁
                    
                }
            }
        }
        
    }
    
    

    相关文章

      网友评论

          本文标题:解决多线程安全问题的锁方式

          本文链接:https://www.haomeiwen.com/subject/qliyyxtx.html