使用synchronized关键字封装一个锁

九路 等级 710 0 0
标签: synchronizedJava

代码如下:

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关键字封装一个锁

收藏
评论区

相关推荐

6、JUC
显示锁 Lock --------  在Java 5.0之前,协调共享对象的访问时可以使用的机 制只有 **synchronized** 和 **volatile** 。Java 5.0 后增加了一些 新的机制,但并不是一种替代内置锁的方法,而是当内 置锁不适用时,作为一种可选择的高级功能。  **ReentrantLock** 实
JUC系列
Java的内置锁一直都是备受争议的,在JDK 1.6之前,synchronized这个重量级锁其性能一直都是较为低下,虽然在1.6后,进行大量的锁优化策略,但是与Lock相比synchronized还是存在一些缺陷的:虽然synchronized提供了便捷性的隐式获取锁释放锁机制(基于JVM机制),但是它却缺少了获取锁与释放锁的可操作性,可中断、超时获取锁,
Java Synchronized
Java Synchronized 1 引言 ==== **在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁,但是随着Java SE1.6对synchronized进行了各种优化之后,有些情况下它并不那么重了,Java SE1.6中为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁。** 2 术语定义 =
Java多线程synchronized关键字引出的多种锁
**前言** ------ Java 中的 `synchronized`关键字可以在多线程环境下用来作为线程安全的同步锁。本文不讨论 `synchronized` 的具体使用,而是研究下`synchronized`底层的锁机制,以及这些锁分别的优缺点。 **一、synchronized机制** -------------------- `synchro
Java并发编程之Synchronized
### **引子** 目前在Java中存在两种锁机制:synchronized和Lock,今天我们先来介绍一下synchronized synchronized可以保证方法或代码块在运行时,同一时刻只有一个线程可以进入到临界区,同时它还保证了共享变量的内存可见性。 ### **用法** Java中的每个对象都可以作为锁。 每一个Object类及其子类
Java并发编程:Lock
一.synchronized的缺陷 ----------------- synchronized是java中的一个关键字,也就是说是Java语言内置的特性。那么为什么会出现Lock呢?   在上面一篇文章中,我们了解到如果一个代码块被synchronized修饰了,当一个线程获取了对应的锁,并执行该代码块时,其他线程便只能一直等待,等待获取锁的线程释放锁
java 并发包之locks包
java.util.concurrent. locks包结构如下 ![](https://oscimg.oschina.net/oscnet/ad8dd36f0340055d411019a3e40ee3f169f.png) Lock ==== 在Lock接口出现之前,java程序主要是靠synchronized关键字实现锁功能的,而java SE5之后
java架构之路(多线程)AQS之ReetrantLock显示锁的使用和底层源码解读
说完了我们的synchronized,这次我们来说说我们的显示锁ReetrantLock。 [java架构之路(多线程)synchronized详解以及锁的膨胀升级过程](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzUxN
java的静态方法加锁与一般方法加锁
第一部分: synchronized 与static synchronized  的区别 第二部分:java多线程锁,源码剖析 1、synchronized与static synchronized 的区别       synchronized是对类的当前实例进行加锁,防止其他线程同时访问该类的该实例的所有synchronized块。   stat
java锁学习(二)
类锁 -- 类锁 !!!! java类有很多对象 ,但是只有一个class对象 !!!! 所以,类锁,就是针对当前类的Class对象的锁 类锁同一时刻只能被一个对象获取 1. synchronized放在static方法上(静态锁) 2. synchronized放在class对象上 ### 静态锁 class SyncClassSt
synchronized 代码块怎么用
![](http://www.liebrother.com/upload/d84c8330b13b46588a58382158eeec87_image.png) [加不加 synchronized 有什么区别?](https://my.oschina.net/liebrother/blog/4253687) [synchronized 作为悲观锁,锁住了
synchronized 原理知多少
![](https://oscimg.oschina.net/oscnet/up-a7f454c7bb76f0e12c82cf9d2b40db29bae.JPEG) `synchronized`是 Java 编程中的一个重要的关键字,也是多线程编程中不可或缺的一员。本文就对它的使用和锁的一些重要概念进行分析。 使用及原理 ===== synchroni
synchronized 和 ReentrantLock的区别
synchronized 是 Java 内建的同步机制,所以也有人称其为 Intrinsic Locking,它提供了互斥的语义和可见性,当一个线程已经获取当前锁时,其他试图获取的线程只能等待或者阻塞在那里。 在 Java 5 以前,synchronized 是仅有的同步手段,在代码中, synchronized 可以用来修饰方法,也可以使用在特定的代码块
synchronized 的实现原理
![](http://www.liebrother.com/upload/ef1e31512ff14b5da181fc36f9190e16_20171113.jpg) [加不加 synchronized 有什么区别?](https://my.oschina.net/liebrother/blog/4253687) [synchronized 作为悲观锁,
synchronized底层原理
* 前言 * 一、synchronized的特性 * 1.1 原子性 * 1.2 可见性 * 1.3 有序性 * 1.4 可重入性 * 二、synchronized的用法 * 三、synchronized锁的实现 * 3.1 同步方法 * 3.2 同步代码块 * 四、