使用synchronized关键字封装一个锁 4年前

代码如下:

public class Lock {
    private boolean isLocked = false;

    public void lock() {
        synchronized (this) {
            while (isLocked) {
                try {
                    wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    isLocked = false;
                    break;
                }
            }
            isLocked = true;
        }
    }


    public void unLock() {//也可以把synchronized放在方法前
        synchronized (this) {
            isLocked = false;
            notifyAll();
        }
    }
}

用法如下:

public class Counter {
    private int count = 0;

    private Lock mLock = new Lock();

    public void inc(){
        mLock.lock();
        count++;
        mLock.unLock();
    }

    public int getCount(){
        return count;
    }

    public static void main(String[] args) throws InterruptedException {

        Counter counter = new Counter();

        for (int i = 0; i < 500; i++) {
            new Thread(new Runnable() {
                @Override
                public void run() {

                    try {
                        Thread.currentThread().sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    counter.inc();
                }
            }).start();
        }


        Thread.currentThread().sleep(1000 * 5);
        System.out.println("count=" + counter.getCount());
    }
}

打印的结果如下: 使用synchronized关键字封装一个锁

全面暴走
能超越历史的人,才叫以史为鉴,然而我们终究不能超越,因为我们自己的欲望和弱点。
3
发布数
0
关注者
1139
累计阅读

热门教程文档

Swift
54小节
PHP
52小节
C
14小节
Java
12小节
MySQL
34小节