订阅
大连华信
大连市 · 计算机软件
公司实力一般
A级纳税人

面试经验

“有难度”
“体验一般”
585 条面经
面试官难度日语hr看中专业技能笔试有收获有笔试数据库技术加班java薪资线程简历2轮面试有难度流程专业知识前端
匿名用户
运营
确定通过感觉靠谱
●stop()和suspend()方法为何不推荐使用 答:反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果很难检查出真正的问题所在。suspend()方法容易发生死锁。调用suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时,其他任何线程都不能访问锁定的资源,除非被”挂起”的线程恢复运行。对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何一个锁定的资源,就会造成死锁。所以不应该使用suspend(),答:wait():使一个线程处于等待状态,并且释放所持有的对象的lock。sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。notify():唤醒一个处于等待状态的线程Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。答:启动一个线程是调用start()方法答:sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,把执行机会给其他线程,       但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。     wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,      进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。答:1. 新建( new ):新创建了一个线程对象。2. 可运行( runnable ):线程对象创建后,其他线程(比如 main 线程)调用了该对象 的 start ()方法。3. 运行( running ):可运行状态( runnable )的线程获得了 cpu 时间片( timeslice ) ,执行程序代码。4. 阻塞( block ):阻塞状态是指线程因为某种原因放弃了 cpu 使用权(一). 等待阻塞:运行( running )的线程执行 o . wait ()方法, JVM 会把该线程放 入等待队列( waitting queue )中。(二). 同步阻塞:运行( running )的线程在获取对象的同步锁时,若该同步锁 被别的线程占用,则 JVM 会把该线程放入锁池( lock pool )中。(三). 其他阻塞: 运行( running )的线程执行 Thread . sleep ( long ms )或 t . join ()方法,或者发出了 I / O 请求时,JVM 会把该线程置为阻塞状态。 当 sleep ()状态超时、 join ()等待线程终止或者超时、或者 I / O 处理完毕时,线程重新转入可运行( runnable )状态。5. 死亡( dead ):线程 run ()、 main () 方法执行结束,或者因异常退出了 run ()方法,则该线程结束生命周期。死亡的线程不可再次复生。答:主要相同点:Lock能完成synchronized所实现的所有功能  主要不同点:Lock有比synchronized更好的性能。synchronized会自动释放锁,     而Lock一定要求程序员手工释放,并且必须在finally从句中释放。...查看更多
包含6个问题,0个回答
Q:●stop()和suspend()方法为何不推荐使用
2 年前 发布
加载中
看准网大连华信大连华信面试经验

找工作