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:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值