zoukankan      html  css  js  c++  java
  • synchronized

    synchronized互斥锁。锁定的是对象。非公平锁

    用在一个static静态方法上,锁定的是类的class,   类中有加锁和不加锁方法,同

    synchronized对象加锁是从堆里直接给对象加锁

    重入锁,类里面一个加锁方法可以调用另一个加锁方法,子类里面也可以调用父类的加锁方法

    程序里出异常,锁会被释放,不想释放就加try/catch.

    不能用字符串常量作为锁的对象 

    wait通常(99%)情况下与while一起使用。

    CountDownLatch:门闩,

    new CountDownLatch(num);//num数量

    latch.await();//等待

    latch.countDown();//数量减一

    减到0后,自动打开

    ReentrantLock:

        用于替代synchronized,但还是有区别的,lock可以尝试获取锁tryLock(),synchronized遇异常会释放锁,而它不会。

    使用ReentrantLock还可以用lockInterruptibly方法,可以对线程interrupt方法做出响应,在一个线程等待锁的过程中,可以被打断。使用场景如第二个线程要等待第一个线程释放锁才能继续,那么第二个就可以用lockInterruptibly()来中断不待。

    Lock lock = new ReentrantLock();//手工锁     ReentrantLock(true);为公平锁
    lock.lock();//锁定
    lock.unlock();//释放锁(一般在finally里释放)

    lock/condition:比wait/notifyall要更精细

    Lock lock = new ReentrantLock();
    Condition a = new lock.newCondition();
    Condition b = new lock.newCondition();
    a.await();a等待
    b.signalAll();通知b

    ThreadLocal:

    ...
  • 相关阅读:
    fatal: unable to auto-detect email address (got 'tim@newton.(none)')的解决方法
    使用git命令提示“不是内部或外部命令
    Windows系统下安装 CMake
    php与mysql的连接
    array_merge和加号的区别
    可重入锁的实现
    redis scan
    redis主丛,哨兵和集群的区别
    高并发架构系列:Redis并发竞争key的解决方案详解
    laravel上传图片
  • 原文地址:https://www.cnblogs.com/javage/p/9503624.html
Copyright © 2011-2022 走看看