java面试遇到的问题怎么解决?java面试基本问题(二)_java自学_java相关资讯_成都java培训机构

java面试遇到的问题怎么解决?java面试基本问题(二)

  • 作者:创始人
  • 发表时间:2022-01-18 10:44:48

想要获得好工作?一场顺利的Java面试是非常重要的。那么Java面试遇到的问题怎么解决?一起来看看这篇Java面试基本问题。

一、Iterator ListIterator 有什么区别

Iterator可用来遍历SetList集合,但是ListIterator只能用来遍历List

Iterator对集合只能是前向遍历,ListIterator既可以前向也可以后向。

ListIterator实现了Iterator接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引等等

二、线程有哪些状态

线程通常都有五种状态,创建、就绪、运行、阻塞和死亡。

创建状态。在生成线程对象,并没有调用该对象的start方法,这是线程处于创建状态。

就绪状态。当调用了线程对象的start方法之后,该线程就进入了就绪状态,但是此时线程调度程序还没有把该线程设置为当前线程,此时处于就绪状态。在线程运行之后,从等待或者睡眠中回来之后,也会处于就绪状态。

运行状态。线程调度程序将处于就绪状态的线程设置为当前线程,此时线程就进入了运行状态,开始运行run函数当中的代码。

阻塞状态。线程正在运行的时候,被暂停,通常是为了等待某个时间的发生(比如说某项资源就绪)之后再继续运行。sleep,suspendwait等方法都可以导致线程阻塞。

死亡状态。如果一个线程的run方法执行结束或者调用stop方法后,该线程就会死亡。对于已经死亡的线程,无法再使用start方法令其进入就绪

java面试遇到的问题怎么解决

三、Synchronized的原理是什么?

Synchronized是由JVM实现的一种实现互斥同步的方式,查看被Synchronized修饰过的程序块编译后的字节码,会发现,被Synchronized修饰过的程序块,在编译前后被编译器生成了monitorentermonitorexit两个字节码指令。

在虚拟机执行到monitorenter指令时,首先要尝试获取对象的锁:如果这个对象没有锁定,或者当前线程已经拥有了这个对象的锁,把锁的计数器+1; 当执行monitorexit指令时,将锁计数器-1;当计数器为0时,锁就被释放了。如果获取对象失败了,那当前线程就要阻塞等待,直到对象锁被另外一个线程释放为止。

JavaSynchronize通过在对象头设置标志,达到了获取锁和释放锁的目的。

四、为什么说Synchronized是非公平锁?

非公平主要表现在获取锁的行为上,并非是按照申请锁的时间前后给等待线程分配锁的,每当锁被释放后,任何一个线程都有机会竞争到锁,这样做的目的是为了提高执行性能,缺点是可能会产生线程饥饿现象。

java面试遇到的问题怎么解决?java面试基本问题(。关注成都Java培训机构,带你了解更多相关问题。