华为面试100题:java开发工程师(中)

华为面试100题:java开发工程师(中)_第1张图片

华为面试100题:java开发工程师(中)_第2张图片

sleep和wait经常被面试官问到,它们的区别如下:

1.sleep是Thread类的静态本地方法,wait则是Object类的本地方法。

2.sleep方法不会释放lock,但wait会释放,而且会加入到等待队列。

sleep就是把cpu的执行资格和执行权释放了出去,不再运行此线程,当定时时间结束再取回cpu资源,参与cpu的调度,获取到cpu资源后就可以继续运行了。而如果sleep是该线程有锁,那么sleep不会释放这个锁,而是带着锁进入冻结状态,也就是说其他需要这个锁的线程根本不可能得到这个锁,也就是说无法执行程序。如果睡眠期间其他线程调用了这个线程的interrupt方法,那么这个线程也会抛出interruptexception异常返回,这点和wait是一样的。

3.sleep方法不依赖与同步器synchronized,但是wait需要依赖synchronized关键字。

4.sleep不需要手动唤醒,wait需要。

5.sleep一般用于当前线程休眠,或则轮询暂停操作,wait则用于多线程之间的通信。

6.sleep会让出cpu执行时间且强制上下文切换,而wait则不一定,wait后可能还有机会重新竞争到锁继续执行的。

华为面试100题:java开发工程师(中)_第3张图片

 执行结果:

22222222

1111

其实不是线程安全,应该是内存安全,堆是共享内存, 可以被所有线程所访问

当一个多线程访问一个对象时,如果不进行额外的同步控制或其他协调操作,调用这个对象的行为都可以获得正确的结果,我们就说这个线程是安全的。

 堆是进程和线程共有的空间,分为全局堆和局部堆。全局堆是所有没有分配的空间,局部堆就是用户分配的空间。堆在操作系统对进程进行初始化的时候分配,运行过程中也可以向系统要额外的堆,但是用完了还要还给操作系统,要不然就是内存泄漏。

在java中,堆是java虚拟机所管理内存中最大的一块,是所有线程共享的一块区域,在虚拟机启动时创建。堆所存在的内存区的唯一目的就是存放对象实例,几乎所有的对象实例和数组都在这里分配内存空间。

华为面试100题:java开发工程师(中)_第4张图片

网络上有个如下的例子,列举出runable在数据共享上更好用,其实这个推断是不对的,这个例子的代码设计就产生了错误,第一个new了两个对象,第二个new了一个对象,导致产生的错误。

华为面试100题:java开发工程师(中)_第5张图片

华为面试100题:java开发工程师(中)_第6张图片 

 华为面试100题:java开发工程师(中)_第7张图片

华为面试100题:java开发工程师(中)_第8张图片

华为面试100题:java开发工程师(中)_第9张图片

华为面试100题:java开发工程师(中)_第10张图片

华为面试100题:java开发工程师(中)_第11张图片

华为面试100题:java开发工程师(中)_第12张图片

华为面试100题:java开发工程师(中)_第13张图片

华为面试100题:java开发工程师(中)_第14张图片

华为面试100题:java开发工程师(中)_第15张图片

华为面试100题:java开发工程师(中)_第16张图片

华为面试100题:java开发工程师(中)_第17张图片

华为面试100题:java开发工程师(中)_第18张图片

华为面试100题:java开发工程师(中)_第19张图片

华为面试100题:java开发工程师(中)_第20张图片

华为面试100题:java开发工程师(中)_第21张图片

华为面试100题:java开发工程师(中)_第22张图片 华为面试100题:java开发工程师(中)_第23张图片

华为面试100题:java开发工程师(中)_第24张图片

 华为面试100题:java开发工程师(中)_第25张图片

华为面试100题:java开发工程师(中)_第26张图片

华为面试100题:java开发工程师(中)_第27张图片

华为面试100题:java开发工程师(中)_第28张图片

华为面试100题:java开发工程师(中)_第29张图片 

华为面试100题:java开发工程师(中)_第30张图片

华为面试100题:java开发工程师(中)_第31张图片 华为面试100题:java开发工程师(中)_第32张图片

华为面试100题:java开发工程师(中)_第33张图片 华为面试100题:java开发工程师(中)_第34张图片

华为面试100题:java开发工程师(中)_第35张图片 

华为面试100题:java开发工程师(中)_第36张图片 

华为面试100题:java开发工程师(中)_第37张图片 

华为面试100题:java开发工程师(中)_第38张图片 华为面试100题:java开发工程师(中)_第39张图片

华为面试100题:java开发工程师(中)_第40张图片 

 

华为面试100题:java开发工程师(中)_第41张图片 

华为面试100题:java开发工程师(中)_第42张图片 

华为面试100题:java开发工程师(中)_第43张图片 

华为面试100题:java开发工程师(中)_第44张图片 

华为面试100题:java开发工程师(中)_第45张图片 

华为面试100题:java开发工程师(中)_第46张图片 

华为面试100题:java开发工程师(中)_第47张图片 

华为面试100题:java开发工程师(中)_第48张图片 

 

华为面试100题:java开发工程师(中)_第49张图片 

华为面试100题:java开发工程师(中)_第50张图片 

华为面试100题:java开发工程师(中)_第51张图片 

华为面试100题:java开发工程师(中)_第52张图片 

 华为面试100题:java开发工程师(中)_第53张图片

华为面试100题:java开发工程师(中)_第54张图片 

 

华为面试100题:java开发工程师(中)_第55张图片 

 

华为面试100题:java开发工程师(中)_第56张图片 

华为面试100题:java开发工程师(中)_第57张图片 

华为面试100题:java开发工程师(中)_第58张图片 

 

华为面试100题:java开发工程师(中)_第59张图片 

华为面试100题:java开发工程师(中)_第60张图片 

华为面试100题:java开发工程师(中)_第61张图片 

华为面试100题:java开发工程师(中)_第62张图片 

华为面试100题:java开发工程师(中)_第63张图片 

 

华为面试100题:java开发工程师(中)_第64张图片 

 

华为面试100题:java开发工程师(中)_第65张图片 

华为面试100题:java开发工程师(中)_第66张图片 

华为面试100题:java开发工程师(中)_第67张图片

你可能感兴趣的:(Java八股文,面试,职场和发展)