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:

    ...
  • 相关阅读:
    可序列化serializable的作用是什么
    HelloWorld编译正常运行报noclassdeffounderror
    dtd对xml没有起到约束作用
    Ajax发送XML请求案例
    Ajax发送GET和POST请求案例
    Ajax发送简单请求案例
    初识Ajax
    数据库设计
    数据库和实例的区别
    Flask
  • 原文地址:https://www.cnblogs.com/javage/p/9503624.html
Copyright © 2011-2022 走看看