Java多线程基础知识解析

格桑2021-12-13 11:40

  最近,有机会总结一下多线程。在面试中Java的多线程一直是一个重要的问题,所以了解Java的多线程知识对于找到一份好工作非常重要。

  今日简单总结一下Java的多线程知识。

Java多线程基础知识解析

  1、Vector,SimpledateFormat是线程安全吗?

  a、Vector和ArrayList实现了相同的界面List,但所有Vector方法都有synchronized的关键修改,单个方法的单独操作是线程安全的,但Vector仍然需要复合操作的同步处理。顺便比较一下两者。

  Vector与ArayList的对比:

  1)Vector效率低,因为每种方法都是线程安全的。

  2)两者都需要连续的内存空间。

  3)Vector每次扩展到原来的两倍,ArayList是原来的1、5倍,当数据过多时,Vector很容易失败内存分配。

  4)与LinkedList索引相比,两者数据速度快,队尾增加或删除速度快,而LinkedList指定位置增加或删除速度快。

  5)ArrayList可通过Listlist=Collections、synchronizedList(newArrayList(、、、);实现线程安全。

  b、SimpledateFormat不是线程安全类。

  2、什么样的Java基础数据类型不安全?

  除了一些关于long类型和double类型的操作外,所有基本类型的操作都是原子级的。目前,JVM(Java虚拟机)使用32位作为原子,而不是64位。当线程将主存中的long/double类型的值读入线程内存时,可能是两个32位值的写作操作。显然,如果几个线程同时操作,可能会出现两个32位值的错误。为了在线程之间共享long和double字段,必须在synchronized或声明为volatile。

  3、哪些集合类是线程安全的?

  Vector、Stack、HashTable、Enumeration(接口),其他集合类别不安全。

  4、多线程中的繁忙循环是什么?使用它的目的是什么?

  繁忙的循环:使用循环让线程等待,不会放弃CPU,传统方法wait()、slep()或yield()都会放弃CPU控制。

  目的:为了保留CPU缓存,避免重建缓存,减少等待重建的时间。在多核系统中,当等待线程醒来时,它可能会在另一个内核中运行,从而重建缓存。

  5、线程的局部变量是什么?

  线程局部变量仅限于线程内部变量,属于线程本身,不在多个线程之间共享。Java提供ThreadLocal来支持线程局部变量,是实现线程安全的一种方式。但在管理环境下(如web服务器)使用局部线程变量时,要特别小心。在这种情况下,工作线程的生命周期比任何应用变量都要长。一旦工作完成后没有释放任何局部线程变量,Java应用程序就有内存泄露的风险。

  6、过程间如何通信,线程间如何通信?

  Linux进程之间的通信方式:管道、著名管道、信号量、消息队列、共享内存、信号、socket。

  Windows进程之间的通信方式:管道、信号量、消息队列、共享内存、socket。

  Linxu线程之间的通信方式:互斥量、条件变量、信号量、信号。

  Windows线程之间的通信方式:互斥量、信号量、事件(Event)、临界区域(CriticalSection)

  以上就是开课吧小编为大家整理发布的“Java多线程基础知识解析”一文,更多相关内容尽在开课吧广场Java教程频道。

Java多线程基础知识解析

免责声明:本站所提供的内容均来源于网友提供或网络搜集,由本站编辑整理,仅供个人研究、交流学习使用。如涉及版权问题,请联系本站管理员予以更改或删除。
有用
分享