北京千锋教育Java培训丨互联网大厂面试题:JavaSE常见面试题库-线程篇(一)
1、什么是线程饿死.什么是活锁?
当所有线程阻塞.或者由于需要的资源无效而不能处理.不存在非阻塞线程使资源可用。JavaAPI中线程活锁可能发生在以下情形:
当所有线程在程序中执行Object.wait(0).参数为0的wait方法。程序将发生活锁直到在相应的对象上有线程调用Object.notify()或者Object.notifyAll()。
当所有线程卡在无限循环中。
2、什么是JavaTimer类?如何创建一个有特定时间间隔的任务?
java.util.Timer是一个工具类.可以用于安排一个线程在未来的某个特定时间执行。Timer类可以用安排一次性任务或者周期任务。
java.util.TimerTask是一个实现了Runnable接口的抽象类.我们需要去继承这个类来创建我们自己的定时任务并使用Timer去安排它的执行。
3、Java中的同步集合与并发集合有什么区别?
同步集合与并发集合都为多线程和并发提供了合适的线程安全的集合.不过并发集合的可扩展性更高。在Java1.5之前程序员们只有同步集合来用且在多线程并发的时候会导致争用.阻碍了系统的扩展性。
Java5介绍了并发集合像ConcurrentHashMap.不仅提供线程安全还用锁分离和内部分区等现代技术提高了可扩展性。
4、同步方法和同步块.哪个是更好的选择?
同步块是更好的选择.因为它不会锁住整个对象(当然你也可以让它锁住整个对象)。同步方法会锁住整个对象.哪怕这个类中有多个不相关联的同步块.这通常会导致他们停止执行并需要等待获得这个对象上的锁。
JAVA程序员面试不自信,快来看看高手面试经典笔记:
5、什么是线程池?为什么要使用它?
创建线程要花费昂贵的资源和时间.如果任务来了才创建线程那么响应时间会变长.而且一个进程能创建的线程数有限。
为了避免这些问题.在程序启动的时候就创建若干线程来响应处理.它们被称为线程池.里面的线程叫工作线程。
从JDK1.5开始.JavaAPI提供了Executor框架让你可以创建不同的线程池。比如单线程池.每次处理一个任务;数目固定的线程池或者是缓存线程池(一个适合很多生存期短的任务的程序的可扩展线程池)。
如果您对以上内容仍有不明之处,更多相关资讯,欢迎您在线咨询我们的工作人员,我们将为您答疑释惑。
【免责声明】本文部分系转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与联系我们,我们会予以更改或删除相关文章,以保证您的权益!