• Java多线程面试、笔试方向---后续补充


    1.ThreadLocal类
         线程级别的局部变量,为每个使用该变量的线程提供一个独立的变量副本,每个线程修改副本时不影响其他线程对象的副本。
       ThreadLocal实例通常作为静态私有字段出现在一个类中。
    2.什么情况会抛出InvalidMonitorStateException异常
         调用Object.wait()/Object.notify()/Object.notifyAll()中的任何一个方法时,如果当前线程没有获得该对象的锁,那么就会抛出 IllegalMonitorStateException 的异常
    3.Object.wait()和Thread.sleep()
         Object.wait(),在拥有该对象锁的情况下,释放该对象锁。一旦线程重新获取到该对象的锁时,方法返回。
         Object.notify()
         Thread.sleep():让出CPU分配的执行时间,但是不释放该线程拥有的锁。
    4.静态方法上使用同步
         如果一个静态方法被申明为synchronized,则等同于在这个方法上调用synchronized(类.class)。
       当一个线程进入同步静态方法中时,其他线程不能进入这个类的任何静态同步方法。
    5.死锁
         死锁就是两个或两个以上的线程被无限的阻塞,线程之间相互等待所需资源。
         可能发生在以下情况:
              当两个线程相互调用Thread.join();
              当两个线程使用嵌套的同步块,一个线程占用了另外一个线程必须的锁,互相等待时被阻塞就有可能出现死锁。
    6.ReentrantLock:
         等待可中断:tryLock(long timeout,TimeUnit unit)当持有锁的线程长期不释放锁时,正在等待的线程可以选择放弃等待,改为处理其他事情。
         公平锁:多个线程在等待同一个锁时,必须按照申请锁的事件顺序来依次获取锁;而非公平锁在被释放时,任何一个等待锁的线程都有机会获得锁。
    Synchronized 中的锁是非公平锁,ReentrantLock 默认也是非公平锁。tryLock()打破公平性,如果该锁没有被另一个线程保持,立即返回true值,并将锁的保持计数器置1。
         锁绑定多个条件:一个ReentrantLock对象可以同时绑定多个Condition对象。
    7.线程状态:
         新建 NEW:
         运行 RUNNABLE:
         无限期等待 WAITING:等得其他线程显式地唤醒。
              没有设置 Timeout 参数的 Object.wait();没有设置 Timeout 参数的 Thread.wait()。
         限期等待 TIMED_WAITING:在一定时间之后会由系统自动唤醒。
              设置 Timeout 参数的 Object.wait();设置 Timeout 参数的 Thread.wait();Thread.sleep()方法。
         阻塞 BLOCKED:等待获取一个排它锁,等待进入一个同步区域。
         结束 TERMINATED:
  • 相关阅读:
    如何利用 iTunes 把 m4a/wav 文件转成 MP3 格式
    The best way to learn a programming language
    琼瑶哀悼丈夫去世
    与“芯片”相关的专业有哪些?
    君子使物,不为物使
    SRID (空间引用识别号, 坐标系)【转】
    编码
    test
    剪贴板神器:Ditto
    写Markdown博客时遇到的一些问题
  • 原文地址:https://www.cnblogs.com/yshb/p/3147632.html
Copyright © 2020-2023  润新知