面试题10解析—多线程通讯与协作
2017-06-02 15:35
267 查看
Java面试那些事儿 2017-05-31 00:08
题目:分别说一下notify()/notifyAll()/sleep()/wait()的区别,以及如何实现多线程之间的通讯和协作?
主要考查多线程的等待问题,以及它们之间的通讯和协作。
notifyAll():唤醒所有的等待该对象同步锁的线程,进入就绪队列等待CPU调度;注意唤醒的是notify之前wait的线程,对于notify之后的wait线程是没有效果的。
wait():调用时需要先获得该Object的锁,调用后,会把当前的锁释放掉同时阻塞住;但可以通过调用该Object的notify()或者notifyAll()来重新获得锁。
sleep():在指定的时间内让正在执行的线程暂停执行,但不会释放锁。
区别:
我们通过对这些方法分析,sleep()方法属于Thread类,而wait()/notify()/notifyAll()属于Object基础类,也就是说每个对象都有wait()/notify()/notifyAll()的功能。
sleep()不会释放锁,而wait()会释放锁。
sleep()必须捕获异常,而wait()/notify()/notifyAll()不需要捕获异常。
sleep()可以在任何地方使用,而wait()/notify()/notifyAll()只能在同步控制方法或者同步控制块里面使用。
通过synchronized/notify/notifyAll来实现线程之间的通信。
利用了Java5中提供的Lock/Condition来实现线程之间的相互通信。
使用信号量,如:CyclicBarrier/Semaphore/Countdownbatch。
记得关注我们哦,这里全部都是干货!!!
题目:分别说一下notify()/notifyAll()/sleep()/wait()的区别,以及如何实现多线程之间的通讯和协作?
主要考查多线程的等待问题,以及它们之间的通讯和协作。
notify()/notifyAll()/sleep()/wait()
notify():随机唤醒一个等待该对象同步锁的线程,进入就绪队列等待CPU的调度;这里的唤醒是由JVM确定唤醒哪个线程,而且不是按优先级决定。notifyAll():唤醒所有的等待该对象同步锁的线程,进入就绪队列等待CPU调度;注意唤醒的是notify之前wait的线程,对于notify之后的wait线程是没有效果的。
wait():调用时需要先获得该Object的锁,调用后,会把当前的锁释放掉同时阻塞住;但可以通过调用该Object的notify()或者notifyAll()来重新获得锁。
sleep():在指定的时间内让正在执行的线程暂停执行,但不会释放锁。
区别:
我们通过对这些方法分析,sleep()方法属于Thread类,而wait()/notify()/notifyAll()属于Object基础类,也就是说每个对象都有wait()/notify()/notifyAll()的功能。
sleep()不会释放锁,而wait()会释放锁。
sleep()必须捕获异常,而wait()/notify()/notifyAll()不需要捕获异常。
sleep()可以在任何地方使用,而wait()/notify()/notifyAll()只能在同步控制方法或者同步控制块里面使用。
如何实现多线程之间的通讯和协作
利用同步和互斥来解决多线程之间的通讯和协作;可以说资源互斥、协调竞争是要解决的因,而同步是竞争协调的果。通过synchronized/notify/notifyAll来实现线程之间的通信。
利用了Java5中提供的Lock/Condition来实现线程之间的相互通信。
使用信号量,如:CyclicBarrier/Semaphore/Countdownbatch。
怎么解决多线程计算的结果统计?
可以用join()以及Future/FutureTask来解决。join()的功能是使异步执行的线程变成同步执行;使用join()后,直到这个线程退出,程序才会往下执行。记得关注我们哦,这里全部都是干货!!!
相关文章推荐
- 面试题15解析-守护线程 / JAVA多线程问题及其补充
- 面试题12解析-多线程之间的协调示例
- 华为面试题解析 - 10
- 10.[个人]C++线程入门到进阶(10)----多线程经典面试题
- 某著名软件公司面试题解析
- Java多线程程序设计详细解析
- 实例解析C++/CLI程序进程之间的通讯
- Java多线程程序设计详细解析
- Java多线程程序设计详细解析
- 支持多线程的日志类,可以在线程中使用,用来与主窗口通讯
- VC++ 多线程之间的通讯
- Java多线程程序设计详细解析
- GPS系统研发人员面试题(VC通讯)
- [导入][转]C#.net同步异步SOCKET通讯和多线程总结
- Java多线程程序设计详细解析
- C#的多线程机制探索(三)—线程的同步和通讯(生产者和消费者)
- C++面试题解析
- Java多线程程序设计详细解析
- GPS系统研发人员面试题(VC通讯)
- Java多线程程序设计详细解析