很多人学习java的最终目的都是通过java获得更好的工作和更高的薪资水平。因此很多人会在面试前去找一些与java有关的面试题。今天为大家分享一些与线程有关的面试题,一起来看看吧。
首先是一些常见的面试题。
ArrayList和Vector有什么区别?hashmap和HashTable有什么区别?StringBuilder和StringBuffer有什么区别?这些都是Java面试中常见的基础问题。面对这样的问题,回答是:ArrayList是非线程安全的,Vector是线程安全的;HashMap是非线程安全的,HashTable是线程安全的;StringBuilder是非线程安全的,StringBuffer是线程安全的。
然后为大家进行详细的解析。
线程是在进程中的,一个进程可以有多个线程,单个线程不能脱离进程存在。
所以单进程中多线程为何优于多进程(每个进程对应一个线程),当同步时,看上去也都是一个线程在执行,但前者的效率将远远高于后者。因为多线程是共享进程中的数据的,共享数据使得线程之间的通信比进程间通信更快更有效。同时,很多时候,线程相对于进程属于轻量级的,更便于创建和销毁。
非线程安全是指多线程操作同一个对象可能会出现问题。而线程安全则是多线程操作同一个对象不会有问题。
线程安全必须要使用很多synchronized关键字来同步控制,所以必然会导致性能的降低。所以在使用的时候,如果是多个线程操作同一个对象,那么使用线程安全的Vector;否则,就使用效率更高的ArrayList。
非线程安全=不安全
有人在使用过程中有一个不正确的观点:我的程序是多线程的,不能使用ArrayList要使用Vector,这样才安全。
其实,非线程安全并不是多线程环境下就不能使用。多线程操作同一个对象。注意是同一个对象。在主线程中new的一个ArrayList然后多个线程操作同一个ArrayList对象。
如果是每个线程中new一个ArrayList,而这个ArrayList只在这一个线程中使用,那么肯定是没问题的。
最后,线程安全的实现,线程安全是通过线程同步控制来实现的,也就是synchronized关键字。
通过上文可以看出,关于线程的知识点是非常庞杂的,这也是掌握它的难点所在。学习是一个非常漫长的过程。想要了解更多Java面试题知识,敬请关注奇Q工具网。
推荐阅读: