您所在位置: 网站首页 / 文档列表 / Java / 文档详情
常见的Java多线程面试问题及解答.docx 立即下载
2024-05-01
约3.6千字
约6页
0
13KB
举报 版权申诉
预览加载中,请您耐心等待几秒...

常见的Java多线程面试问题及解答.docx

常见的Java多线程面试问题及解答.docx

预览

在线预览结束,喜欢就下载吧,查找使用更方便

10 金币

下载文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

常见的Java多线程面试问题及解答常见的Java多线程面试问题及解答问题:进程和线程的区别解答:一个进程对应一个程序的执行,而一个线程则是进程执行过程中的一个单独的执行序列,一个进程可以包含多个线程。线程有时候也被称为轻量级进程.一个Java虚拟机的实例运行在一个单独的进程中,不同的线程共享Java虚拟机进程所属的堆内存。这也是为什么不同的线程可以访问同一个对象。线程彼此共享堆内存并保有他们自己独自的栈空间。这也是为什么当一个线程调用一个方法时,他的局部变量可以保证线程安全。但堆内存并不是线程安全的,必须通过显示的声明同步来确保线程安全。问题:列举几种不同的创建线程的方法.解答:可以通过如下几种方式:继承Thread类实现Runnable接口使用Executorframework(这会创建一个线程池)123456789101112131415classCounterextendsThread{//methodwherethethreadexecutionwillstartpublicvoidrun(){//logictoexecuteinathread}//let’sseehowtostartthethreadspublicstaticvoidmain(String[]args){Threadt1=newCounter();Threadt2=newCounter();t1.start();//startthefirstthread.Thiscallstherun()method.t2.start();//thisstartsthe2ndthread.Thiscallstherun()method.}}123456789101112131415classCounterextendsBaseimplementsRunnable{//methodwherethethreadexecutionwillstartpublicvoidrun(){//logictoexecuteinathread}//letusseehowtostartthethreadspublicstaticvoidmain(String[]args){Threadt1=newThread(newCounter());Threadt2=newThread(newCounter());t1.start();//startthefirstthread.Thiscallstherun()method.t2.start();//thisstartsthe2ndthread.Thiscallstherun()method.}}通过线程池来创建更有效率。问题:推荐通过哪种方式创建线程,为什么?解答:最好使用Runnable接口,这样你的类就不必继承Thread类,不然当你需要多重继承的时候,你将一筹莫展(我们都知道Java中的类只能继承自一个类,但可以同时实现多个接口)。在上面的例子中,因为我们要继承Base类,所以实现Runnable接口成了显而易见的选择。同时你也要注意到在不同的'例子中,线程是如何启动的。按照面向对象的方法论,你应该只在希望改变父类的行为的时候才去继承他。通过实现Runnable接口来代替继承Thread类可以告诉使用者Counter是Base类型的一个对象,并会作为线程执行。问题:简要的说明一下高级线程状态.解答:下图说明了线程的各种状态.可执行(Runnable):当调用start()方法后,一个线程变为可执行状态,但是并不意味着他会立刻开始真正地执行。而是被放入线程池,由线程调度器根据线程优先级决定何时挂起执行。12MyThreadaThread=newMyThread();aThread.start();//becomesrunnable执行中(Running):处理器已经在执行线程的代码。他会一直运行直到被阻断,或者通过静态方法Thread.yield()自行放弃执行的机会,考虑到场景切换所带来的开销,yield()方法不应该被经常调用。等待中(Waiting):线程由于等待I/O等外部进程的处理结果而处于被阻断的状态,调用currObject.wait()方法会使得当前线程进入等待状态,直到其它线程调用currObject.notify()或者currObject.notifyAll()。睡眠中(Sleeping):重载方法Thread.sleep(milliseconds),Thread.sleep(milliseconds,nanoseconds)可以迫使Java线程进入睡眠状态(挂起)。由于I/O阻塞(BlockedonI/O):当I/O条件发生变化时(例如读取了几个字节的数据)会迁移到可执行状态。由于同步阻塞中(Blockedonsync
单篇购买
VIP会员(1亿+VIP文档免费下)

扫码即表示接受《下载须知》

常见的Java多线程面试问题及解答

文档大小:13KB

限时特价:扫码查看

• 请登录后再进行扫码购买
• 使用微信/支付宝扫码注册及付费下载,详阅 用户协议 隐私政策
• 如已在其他页面进行付款,请刷新当前页面重试
• 付费购买成功后,此文档可永久免费下载
全场最划算
12个月
199.0
¥360.0
限时特惠
3个月
69.9
¥90.0
新人专享
1个月
19.9
¥30.0
24个月
398.0
¥720.0
6个月会员
139.9
¥180.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用

手机号注册 用户名注册
我已阅读并接受《用户协议》《隐私政策》
已有账号?立即登录
我已阅读并接受《用户协议》《隐私政策》
已有账号?立即登录
登录
手机号登录 微信扫码登录
微信扫一扫登录 账号密码登录

首次登录需关注“豆柴文库”公众号

新用户注册
VIP会员(1亿+VIP文档免费下)
全场最划算
12个月
199.0
¥360.0
限时特惠
3个月
69.9
¥90.0
新人专享
1个月
19.9
¥30.0
24个月
398.0
¥720.0
6个月会员
139.9
¥180.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用