java面试题2023年及答案.docx
《java面试题2023年及答案.docx》由会员分享,可在线阅读,更多相关《java面试题2023年及答案.docx(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 java面试题2023及答案 1) 什么是线程? 线程是操作系统能够进展运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进展多处理器编程,你可以使用多线程对 运算密集型任务提速。比方,假如一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒。Java在语言层面对多线程供应了卓越的支 持,它也是一个很好的卖点。欲了解更多具体信息请点击这里。 2) 线程和进程有什么区分? 线程是进程的子集,一个进程可以有许多线程,每条线程并行执行不同的任务。不同的进程使用不同的内存空间,而全部的线程共享一片一样的内存空间。别把它和栈内存搞混,每个线程都拥有单独的
2、栈内存用来存储本地数据。更多具体信息请点击这里。 3) 如何在Java中实现线程? 在语言层面有两种方式。java。lang。Thread 类的实例就是一个线程但是它需要调用java。lang。Runnable接口来执行,由于线程类本身就是调用的Runnable接口所以你可以继承 java。lang。Thread 类或者直接调用Runnable接口来重写run()方法实现线程。更多具体信息请点击这里。 4) 用Runnable还是Thread? 这个问题是上题的后续,大家都知道我们可以通过继承Thread类或者调用Runnable接口来实现线程,问题是,那个方法更好呢?什么状况下使 用它?这个
3、问题很简单答复,假如你知道Java不支持类的多重继承,但允许你调用多个接口。所以假如你要继承其他类,固然是调用Runnable接口好 了。更多具体信息请点击这里。 6) Thread 类中的start() 和 run() 方法有什么区分? 这个问题常常被问到,但还是能从今区分出面试者对Java线程模型的理解程度。start()方法被用来启动新创立的线程,而且start()内部 调用了run()方法,这和直接调用run()方法的效果不一样。当你调用run()方法的时候,只会是在原来的线程中调用,没有新的线程启 动,start()方法才会启动新线程。更多争论请点击这里 7) Java中Runnab
4、le和Callable有什么不同? Runnable和Callable都代表那些要在不同的线程中执行的任务。Runnable从JDK1。0开头就有了,Callable是在 JDK1。5增加的。它们的主要区分是Callable的 call() 方法可以返回值和抛出特别,而Runnable的run()方法没有这些功能。Callable可以返回装载有计算结果的Future对象。我的博客有更具体的说明。 8) Java中CyclicBarrier 和 CountDownLatch有什么不同? CyclicBarrier 和 CountDownLatch 都可以用来让一组线程等待其它线程。与 Cycli
5、cBarrier 不同的是,CountdownLatch 不能重新使用。点此查看更多信息和例如代码。 9) Java内存模型是什么? Java内存模型规定和指引Java程序在不同的内存架构、CPU和操作系统间有确定性地行为。它在多线程的状况下尤其重要。Java内存模型对一 个线程所做的变动能被其它线程可见供应了保证,它们之间是先行发生了关系。这个关系定义了一些规章让程序员在并发编程时思路更清楚。比方,先行发生了关系确保 了: 线程内的代码能够按先后挨次执行,这被称为程序次序规章。 对于同一个锁,一个解锁操作肯定要发生在时间上后发生的另一个锁定操作之前,也叫做管程锁定规章。 前一个对volati
6、le的写操作在后一个volatile的读操作之前,也叫volatile变量规章。 一个线程内的任何操作必需在这个线程的start()调用之后,也叫作线程启动规章。 一个线程的全部操作都会在线程终止之前,线程终止规章。 一个对象的终结操作必需在这个对象构造完成之后,也叫对象终结规章。 可传递性 我剧烈建议大家阅读Java并发编程实践第十六章来加深对Java内存模型的理解。 10) Java中的volatile 变量是什么? volatile是一个特别的修饰符,只有成员变量才能使用它。在Java并发程序缺少同步类的状况下,多线程对成员变量的操作对其它线程是透亮的。volatile变量可以保证下一个
7、读取操作会在前一个写操作之后发生,就是上一题的volatile变量规章。点击这里查看更多volatile的相关内容。 11) 什么是线程安全?Vector是一个线程安全类吗? (详见这里) 假如你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。假如每次运行结果和单线程运行的结果是一样的,而且其他的变量 的值也和预期的是一样的,就是线程安全的。一个线程安全的计数器类的同一个实例对象在被多个线程使用的状况下也不会消失计算失误。很明显你可以将集合类分 成两组,线程安全和非线程安全的。Vector 是用同步方法来实现线程安全的, 而和它相像的ArrayList不是线程安全的。
8、 12) Java中什么是竞态条件? 举个例子说明。 竞态条件会导致程序在并发状况下消失一些bugs。多线程对一些资源的竞争的时候就会产生竞态条件,假如首先要执行的程序竞争失败排到后面执行了, 那么整个程序就会消失一些不确定的bugs。这种bugs很难发觉而且会重复消失,由于线程间的随机竞争。一个例子就是无序处理,详见答案。 13) Java中如何停顿一个线程? Java供应了很丰富的API但没有为停顿线程供应API。JDK 1。0原来有一些像stop(), suspend() 和 resume()的掌握方法但是由于潜在的死锁威逼因此在后续的JDK版本中他们被弃用了,之后Java API的设计
9、者就没有供应一个兼容且线程安全的方法来停顿一个线程。当run() 或者 call() 方法执行完的时候线程会自动完毕,假如要手动完毕一个线程,你可以用volatile 布尔变量来退出run()方法的循环或者是取消任务来中断线程。点击这里查看例如代码。 14) 一个线程运行时发生特别会怎样? 这是我在一次面试中遇到的一个很刁钻的Java面试题, 简洁的说,假如特别没有被捕获该线程将会停顿执行。Thread。UncaughtExceptionHandler是用于处理未捕获特别造成线程突然中 断状况的一个内嵌接口。当一个未捕获特别将造成线程中断的时候JVM会使用Thread。getUncaughtE
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 试题 2023 答案
限制150内