志在指尖
用双手敲打未来

Java线程池的面试题

1)什么是线程?
线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实践运作单位。程序员能够经过它进行多处理器编程,你能够运用多线程对运算密集型使命提速。比方,假如一个线程完结一个使命要100毫秒,那么用十个线程完结改使命只需10毫秒。Java在语言层面临多线程提供了杰出的支撑,它也是一个很好的卖点。
2)线程和进程有什么区别?
线程是进程的子集,一个进程能够有许多线程,每条线程并行执行不同的使命。不同的进程运用不同的内存空间,而一切的线程共享一片相同的内存空间。别把它和栈内存搞混,每个线程都具有独自的栈内存用来存储本地数据。
3)如安在Java中完成线程?
在语言层面有两种办法。java.lang.Thread类的实例便是一个线程但是它需求调用java.lang.Runnable接口来执行,因为线程类本身便是调用的Runnable接口所以你能够承继java.lang.Thread类或许直接调用Runnable接口来重写run()办法完成线程。
4)用Runnable仍是Thread?
这个问题是上题的后续,我们都知道我们能够经过承继Thread类或许调用Runnable接口来完成线程,问题是,那个办法更好呢?什么情况下运用它?这个问题很简单回答,假如你知道Java不支撑类的多重承继,但允许你调用多个接口。所以假如你要承继其他类,当然是调用Runnable接口好了。
6)Thread类中的start()和run()办法有什么区别?
这个问题经常被问到,但仍是能从此区别出面试者对Java线程模型的了解程度。start()办法被用来发动新创建的线程,而且start()内部调用了run()办法,这和直接调用run()办法的作用不一样。当你调用run()办法的时候,只会是在原来的线程中调用,没有新的线程发动,start()办法才会发动新线程。
7)Java中Runnable和Callable有什么不同?
Runnable和Callable都代表那些要在不同的线程中执行的使命。Runnable从JDK1.0开端就有了,Callable是在JDK1.5添加的。它们的主要区别是Callable的call()办法能够返回值和抛出反常,而Runnable的run()办法没有这些功能。Callable能够返回装载有计算结果的Future目标。
8)Java中CyclicBarrier和CountDownLatch有什么不同?
CyclicBarrier和CountDownLatch都能够用来让一组线程等候其它线程。与CyclicBarrier不同的是,CountdownLatch不能从头运用。
9)Java内存模型是什么?
Java内存模型规定和指引Java程序在不同的内存架构、CPU和操作系统间有确定性地行为。它在多线程的情况下特别重要。Java内存模型对一个线程所做的变动能被其它线程可见提供了确保,它们之间是先行产生关系。这个关系界说了一些规矩让程序员在并发编程时思路更清晰。比方,先行产生关系确保了:
线程内的代码能够按先后顺序执行,这被称为程序次第规矩。
对于同一个锁,一个解锁操作一定要产生在时间上后产生的另一个锁定操作之前,也叫做管程锁定规矩。
前一个对volatile的写操作在后一个volatile的读操作之前,也叫volatile变量规矩。
一个线程内的任何操作必需在这个线程的start()调用之后,也叫作线程发动规矩。
一个线程的一切操作都会在线程停止之前,线程停止规矩。
一个目标的完结操作必需在这个目标构造完结之后,也叫目标完结规矩。
可传递性
我强烈建议我们阅览《Java并发编程实践》第十六章来加深对Java内存模型的了解。
10)Java中的volatile变量是什么?
volatile是一个特殊的修饰符,只有成员变量才能运用它。在Java并发程序缺少同步类的情况下,多线程对成员变量的操作对其它线程是通明的。volatile变量能够确保下一个读取操作会在前一个写操作之后产生,便是上一题的volatile变量规矩。

未经允许不得转载:IT技术网站 » Java线程池的面试题
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载