大厂P7 Java程序员高频面试题-6
Posted 四猿外
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大厂P7 Java程序员高频面试题-6相关的知识,希望对你有一定的参考价值。
一个线程运行时发生异常会怎样?
如果异常没有被捕获该线程将会停止执行。Thread.UncaughtExceptionHandler是用于处理未捕获异常造成线程突然中断情况的一个内嵌接口。当一个未捕获异常将造成线程中断的时候JVM 会使用Thread.getUncaughtExceptionHandler()来查询线程的UncaughtExceptionHandler 并将线程和异常作为参数传递给handler 的uncaughtException()方法进行处理。
如何在两个线程间共享数据?
在两个线程间共享变量即可实现共享。
一般来说,共享变量要求变量本身是线程安全的, 然后在线程内使用的时候, 如果有对共享变量的复合操作,那么也得保证复合操作的线程安全性。
Java 中notify 和notifyAll 有什么区别?
notify() 方法不能唤醒某个具体的线程, 所以只有一个线程在等待的时候它才有用武之地。而notifyAll()唤醒所有线程并允许他们争夺锁确保了至少有一个线程能继续运行。
为什么wait, notify 和notifyAll 这些方法不在thread类里面?
一个很明显的原因是JAVA 提供的锁是对象级的而不是线程级的,每个对象都有锁,通过线程获得。由于wait,notify 和notifyAll 都是锁级别的操作,所以把他们定义在Object 类中因为锁属于对象。
什么是ThreadLocal 变量?
ThreadLocal 是Java 里一种特殊的变量。每个线程都有一个ThreadLocal 就是每个线程都拥有了自己独立的一个变量,竞争条件被彻底消除了。它是为创建代价高昂的对象获取线程安全的好方法, 比如你可以用ThreadLocal 让SimpleDateFormat 变成线程安全的, 因为那个类创建代价高昂且每次调用都需要创建不同的实例所以不值得在局部范围使用它, 如果为每个线程提供一个自己
独有的变量拷贝,将大大提高效率。首先,通过复用减少了代价高昂的对象的创建个数。其次,你在没有使用高代价的同步或者不变性的情况下获得了线程安全。
Java 中interrupted 和isInterrupted 方法的区别?
interrupt
interrupt 方法用于中断线程。调用该方法的线程的状态为将被置为”中断”状态。
注意:线程中断仅仅是置线程的中断状态位, 不会停止线程。需要用户自己去监视线程的状态为并做处理。支持线程中断的方法( 也就是线程中断后会抛出interruptedException 的方法) 就是在监视线程的中断状态,一旦线程的中断状态被置为“中断状态” ,就会抛出中断异常。
interrupted
查询当前线程的中断状态,并且清除原状态。如果一个线程被中断了,第一次调用interrupted 则返回true,第二次和后面的就返回false 了。
isInterrupted
仅仅是查询当前线程的中断状态
以上是关于大厂P7 Java程序员高频面试题-6的主要内容,如果未能解决你的问题,请参考以下文章