Java多线程面试题(三)
- 前言
- 1、Thread 类中的 yield 方法有什么作用?
- 2、Java 线程池中 submit() 和 execute()方法有什么区别?
- 3、Java 中的 ReadWriteLock 是什么?
- 4、可以直接调用 Thread 类的 run ()方法么?
- 5、如何让正在运行的线程暂停一段时间?
- 6、如何确保 main()方法所在的线程是 Java 程序最后结束的线程?
- 7、线程之间是如何通信的?
- 8、为什么 wait(), notify()和 notifyAll ()必须在同步方法或者同步块中被调用?
- 9、为什么 Thread 类的 sleep()和 yield ()方法是静态的?
- 10、如何确保线程安全?
- 11、同步方法和同步代码块,哪个是更好的选择?
- 12、如何创建守护线程?
- 13、什么是 Java Timer 类?如何创建一个有特定时间间隔的任务?
- 14、并发编程三要素?
- 15、实现可见性的方法有哪些?
- 16、多线程的价值?
- 17、什么是 AQS?
- 18、synchronized、volatile、CAS 比较?
- 19、同步方法和同步块,哪个是更好的选择?
- 20、Java 线程数过多会造成什么异常?
- 总结
前言
最新的 Java 面试题,技术栈涉及 Java 基础、集合、多线程、Mysql、分布式、Spring全家桶、MyBatis、Dubbo、缓存、消息队列、Linux…等等,会持续更新。
如果对老铁有帮助,帮忙免费点个赞,谢谢你的发财手!
1、Thread 类中的 yield 方法有什么作用?
使当前线程从运行状态变为就绪状态。
如果线程到了就绪状态,可能是立即调用,也可能继续等待 。
2、Java 线程池中 submit() 和 execute()方法有什么区别?
两个方法都可以向线程池提交任务。
- execute()方法的返回类型是 void,它定义在Executor 接口中。
- submit()方法可以返回持有计算结果的 Future 对象,它定义在ExecutorService 接口中,扩展了 Executor 接口。
3、Java 中的 ReadWriteLock 是什么?
实现了读写的分离,读锁是共享的,写锁是独占的,读和读之间不会互斥,读和写、写和读、写和写之间才会互斥,提升了读写的性能。
4、可以直接调用 Thread 类的 run ()方法么?
当然可以。但是如果我们调用了 Thread 的 run()方法,它的行为就会和普通的方法一样,会在当前线程中执行。为了在新的线程中执行我们的代码,必须使用Thread.start()方法。
5、如何让正在运行的线程暂停一段时间?
我们可以使用 Thread 类的 Sleep()方法让线程暂停一段时间。需要注意的是,这并不会让线程终止,一旦从休眠中唤醒线程,线程的状态将会被改变为 Runnable,并且根据线程调度,它将得到执行。
6、如何确保 main()方法所在的线程是 Java 程序最后结束的线程?
我们可以使用 Thread 类的 join()方法来确保所有程序创建的线程在 main()方法退出前结束。