65、线程的生命周期? (*面试题)
新建: 创建线程对象
就绪: 具备cup执行资格,没有执行权,随时准备执行
运行: 具备执行资格,执行权,执行run()中的代码
堵塞: 是当线程运行到符合某个我们定义的条件时,它会停止下来等待唤醒
死亡: run()结束了
66、多线程为什么会出现安全问题?怎么解决呢?(*面试题)
如果满足以下条件,那么就会出现安全问题:
A:是多线程程序。
B:有共享的数据。
C:针对共享数据有多条语句操作。
只要我们把多线程环境中,把操作共享数据的操作,变成单线程就没有问题了。
Java针对这种情况,就提供了同步技术:
A:同步代码块
B:同步方法
C:JDK5以后的Lock锁
67、同步的锁对象分别是?(*面试题)
代码块:任意对象
方法:this
静态方法:类名.class
68、sleep()和wait()的区别?(*面试题)
sleep():必须指定时间,不释放锁对象。
wait():可以指定时间,也可以不指定。释放锁对象。
69、线程死锁是什么,为什么有死锁,怎么解决死锁?(*面试题)
为了解决程序因占用资源,出现资源争抢,而出现的程序进入等待的状态(死锁)。
举例:有A和B两个线程,有CD 两把锁, A和B嵌套CD锁,A线程中有C,D锁,B线程中有D C两把锁,当两个线程运行时,就可能会出现死锁导致
程序停滞的情况。
怎么解决:真正意义上来说,死锁是不能被解决的,死锁是多线程中的一个需要避免的重大的问题,当我们在编写程序时,可以给共享的资源加上另外一
个把锁,控制资源的动态,同时可以设置线程的优先级使线程之间协调合理的利用CPU的时间。
70、线程间的通信是什么?
不同种类的线程针对同一个资源的操作。
|
|