使用lock实现多线程并发访问

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011066470/article/details/86663976

一.主类
​​​​

package com.ljf.thread.demo.lock;

public class LockDemo {
    public static void main(String args[]){
        LockA la=new LockA();
    new Thread(la,"a").start();
    new Thread(la,"b").start();
    new Thread(la,"c").start();
    }
}

package com.ljf.thread.demo.lock;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class LockA implements Runnable{
    private int tickets=100;
    private Lock lock=new ReentrantLock();//公用一把锁
    public void run() {
        while (true){
            try {
                lock.lock();
                if(tickets>0){
                    System.out.println(Thread.currentThread().getName()+"消费:"+tickets--);
                }
                Thread.sleep(100);

            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                lock.unlock();
            }
        }
    }
}

执行结果:

a消费:100
a消费:99
a消费:98
a消费:97
a消费:96
a消费:95
a消费:94
a消费:93
a消费:92
b消费:91
b消费:90
c消费:89
c消费:88
c消费:87
a消费:86
a消费:85
a消费:84
a消费:83
a消费:82
a消费:81
a消费:80
b消费:79
b消费:78
b消费:77
b消费:76
b消费:75
c消费:74
c消费:73
c消费:72
c消费:71
c消费:70
c消费:69
a消费:68
a消费:67
a消费:66
a消费:65
b消费:64
c消费:63
c消费:62
c消费:61
c消费:60
c消费:59
a消费:58
a消费:57
a消费:56
a消费:55
b消费:54
b消费:53
c消费:52
c消费:51
a消费:50
b消费:49
c消费:48
a消费:47
a消费:46
b消费:45
b消费:44
b消费:43
b消费:42
b消费:41
b消费:40
b消费:39
b消费:38
b消费:37
b消费:36
b消费:35
b消费:34
b消费:33
b消费:32
b消费:31
b消费:30
b消费:29
c消费:28
a消费:27
a消费:26
a消费:25
a消费:24
a消费:23
a消费:22
a消费:21
a消费:20
a消费:19
a消费:18
a消费:17
a消费:16
a消费:15
a消费:14
b消费:13
b消费:12
c消费:11
a消费:10
a消费:9
a消费:8
a消费:7
a消费:6
a消费:5
b消费:4
b消费:3
b消费:2
c消费:1

都看到这里了,就顺手点击左上角的【关注】按钮,点击右上角的小手,给个评论,关注一下,再走呗!☺

猜你喜欢

转载自blog.csdn.net/u011066470/article/details/86663976