码迷,mamicode.com
首页 > 编程语言 > 详细

关于线程的面试题(1)

时间:2015-08-29 12:42:42      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:线程   面试题   sleep   wait   

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接口好了。



5) Thread 类中的start() 和 run() 方法有什么区别?
这个问题经常被问到,但还是能从此区分出面试者对Java线程模型的理解程度。
start()方法被用来启动新创建的线程,而且start()内部调用了run()方法,这和直接调用run()方法的效果不一样。

当你调用run()方法的时候,只会是在原来的线程中调用,没有新的线程启动,start()方法才会启动新线程。


6)sleep() 和 wait() 有什么区别? 

    sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。

wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。


版权声明:本文为博主原创文章,未经博主允许不得转载。

关于线程的面试题(1)

标签:线程   面试题   sleep   wait   

原文地址:http://blog.csdn.net/ailan_/article/details/48085907

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!