近来,我有去面试,常碰一些题:
1、Sleep()和Wait()区别?
答:一、两个方法来自不同的类,Sleep()来自Thread类,是Thread的静态类方法,Wait()来自Object类;
二、最主要是Sleep()没有释放锁,而Wait()释放了锁;Sleep不出让系统资源;而wait是进入线程等待池等待;wait没有时间限制,需要等待notify/notifyAll唤醒,才会进入就绪队列等待系统资源,Sleep(milliseconds)可以用时间指定唤醒过来,时间没到还可以调用interrupt()强行打断;Thread.Sleep(0)的作用是“触发操作系统重新进行一次CPU竞争”;
三、Sleep()可在任一地方使用,wait()及notify和notifyall只能在同步控制范围使用;
四、Sleep()必须捕获异常,而wait(),notify和notifyAll不需要捕获异常。
2、Start()和Run()在线程中区别?
答:start()用来启动线程,线程处于就绪状态,然后通过run()来完成运行操作;
run为线程体,包含执行的内容,run方法结束,线程就要终止;
run方法当普通方法调用,程序依然要顺序执行,这时只是一个方法调用,程序依然只有主线程一个线程。