ImageVerifierCode 换一换
格式:DOC , 页数:11 ,大小:65.50KB ,
资源ID:11890798      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/11890798.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(java面试线程问题.doc)为本站上传会员【仙人****88】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

java面试线程问题.doc

1、Java程序员面试中的多线程问题 2012-05-28 09:12 | 10733次阅读 | 【已有25条评论】发表评论 来源:fromdev | 收藏到我的网摘 很多核心Java面试题来源于多线程(Multi-Threading)和集合框架(Collections Framework),理解核心线程概念时,娴熟的实际经验是必需的。这篇文章收集了 Java 线程方面一些典型的问题,这些问题经常被高级工程师所问到。 0.Java 中多线程同步是什么? 在多线程程序下,同步能控制对共享资源的访问。如果没有同步,当一个 Java 线程在修改一个共享变量时,另外一个线程正在使用或者更新同一个

2、变量,这样容易导致程序出现错误的结果。 1.解释实现多线程的几种方法? 一 Java 线程可以实现 Runnable 接口或者继承 Thread 类来实现,当你打算多重继承时,优先选择实现 Runnable。 2.Thread.start ()与 Thread.run ()有什么区别? Thread.start ()方法(native)启动线程,使之进入就绪状态,当 cpu 分配时间该线程时,由 JVM 调度执行 run ()方法。 3.为什么需要 run ()和 start ()方法,我们可以只用 run ()方法来完成任务吗? 我们需要 run ()&start ()这两个

3、方法是因为 JVM 创建一个单独的线程不同于普通方法的调用,所以这项工作由线程的 start 方法来完成,start 由本地方法实现,需要显示地被调用,使用这俩个方法的另外一个好处是任何一个对象都可以作为线程运行,只要实现了 Runnable 接口,这就避免因继承了 Thread 类而造成的 Java 的多继承问题。 4.什么是 ThreadLocal 类,怎么使用它? ThreadLocal 是一个线程级别的局部变量,并非“本地线程”。ThreadLocal 为每个使用该变量的线程提供了一个独立的变量副本,每个线程修改副本时不影响其它线程对象的副本(译者注)。 下面是线程局部变量(Th

4、readLocal variables)的关键点: 一个线程局部变量(ThreadLocal variables)为每个线程方便地提供了一个单独的变量。 ThreadLocal 实例通常作为静态的私有的(private static)字段出现在一个类中,这个类用来关联一个线程。 当多个线程访问 ThreadLocal 实例时,每个线程维护 ThreadLocal 提供的独立的变量副本。 常用的使用可在 DAO 模式中见到,当 DAO 类作为一个单例类时,数据库链接(connection)被每一个线程独立的维护,互不影响。(基于线程的单例) ThreadLocal 难于理解,下面这些引

5、用连接有助于你更好的理解它。 《Good article on ThreadLocal on IBM DeveloperWorks 》、《理解 ThreadLocal》、《Managing data : Good example》、《Refer Java API Docs》 5.什么时候抛出 InvalidMonitorStateException 异常,为什么? 调用 wait ()/notify ()/notifyAll ()中的任何一个方法时,如果当前线程没有获得该对象的锁,那么就会抛出 IllegalMonitorStateException 的异常(也就是说程序在没有执行对象的

6、任何同步块或者同步方法时,仍然尝试调用 wait ()/notify ()/notifyAll ()时)。由于该异常是 RuntimeExcpetion 的子类,所以该异常不一定要捕获(尽管你可以捕获只要你愿意).作为 RuntimeException,此类异常不会在 wait (),notify (),notifyAll ()的方法签名提及。 6.Sleep ()、suspend ()和 wait ()之间有什么区别? Thread.sleep ()使当前线程在指定的时间处于“非运行”(Not Runnable)状态。线程一直持有对象的监视器。比如一个线程当前在一个同步块或同步方法中,其

7、它线程不能进入该块或方法中。如果另一线程调用了 interrupt ()方法,它将唤醒那个“睡眠的”线程。 注意:sleep ()是一个静态方法。这意味着只对当前线程有效,一个常见的错误是调用t.sleep (),(这里的t是一个不同于当前线程的线程)。即便是执行t.sleep (),也是当前线程进入睡眠,而不是t线程。t.suspend ()是过时的方法,使用 suspend ()导致线程进入停滞状态,该线程会一直持有对象的监视器,suspend ()容易引起死锁问题。 object.wait ()使当前线程出于“不可运行”状态,和 sleep ()不同的是 wait 是 object

8、的方法而不是 thread。调用 object.wait ()时,线程先要获取这个对象的对象锁,当前线程必须在锁对象保持同步,把当前线程添加到等待队列中,随后另一线程可以同步同一个对象锁来调用 object.notify (),这样将唤醒原来等待中的线程,然后释放该锁。基本上 wait ()/notify ()与 sleep ()/interrupt ()类似,只是前者需要获取对象锁。 7.在静态方法上使用同步时会发生什么事? 同步静态方法时会获取该类的“Class”对象,所以当一个线程进入同步的静态方法中时,线程监视器获取类本身的对象锁,其它线程不能进入这个类的任何静态同步方法。它不像实

9、例方法,因为多个线程可以同时访问不同实例同步实例方法。 8.当一个同步方法已经执行,线程能够调用对象上的非同步实例方法吗? 可以,一个非同步方法总是可以被调用而不会有任何问题。实际上,Java 没有为非同步方法做任何检查,锁对象仅仅在同步方法或者同步代码块中检查。如果一个方法没有声明为同步,即使你在使用共享数据 Java 照样会调用,而不会做检查是否安全,所以在这种情况下要特别小心。一个方法是否声明为同步取决于临界区访问(critial section access),如果方法不访问临界区(共享资源或者数据结构)就没必要声明为同步的。 下面有一个示例说明:Common 类有两个方法 sy

10、nchronizedMethod1()和 method1(),MyThread 类在独立的线程中调用这两个方法。 1 public class Common { 2 3 public synchronized void synchronizedMethod1() { 4 System.out.println ("synchronizedMethod1 called"); 5 try { 6 Thread.sleep (1000); 7 } catch (InterruptedException e) { 8 e.printStackTrace (

11、); 9 } 10 System.out.println ("synchronizedMethod1 done"); 11 } 12 public void method1() { 13 System.out.println ("Method 1 called"); 14 try { 15 Thread.sleep (1000); 16 } catch (InterruptedException e) { 17 e.printStackTrace (); 18 } 19 System.out.println ("Method 1

12、 done"); 20 } 21 } 22 public class MyThread extends Thread { 23 private int id = 0; 24 private Common common; 25 26 public MyThread (String name, int no, Common object) { 27 super(name); 28 common = object; 29 id = no; 30 } 31 32 public void run () { 33 S

13、ystem.out.println ("Running Thread" + this.getName ()); 34 try { 35 if (id == 0) { 36 common.synchronizedMethod1(); 37 } else { 38 common.method1(); 39 } 40 } catch (Exception e) { 41 e.printStackTrace (); 42 } 43 } 44 45 public static void main (String[] args)

14、{ 46 Common c = new Common (); 47 MyThread t1 = new MyThread ("MyThread-1", 0, c); 48 MyThread t2 = new MyThread ("MyThread-2", 1, c); 49 t1.start (); 50 t2.start (); 51 } 52 } 这里是程序的输出: 53 Running ThreadMyThread-1 54 synchronizedMethod1 called 55 Running ThreadMyThrea

15、d-2 56 Method 1 called 57 synchronizedMethod1 done 58 Method 1 done 结果表明即使 synchronizedMethod1()方法执行了,method1()也会被调用。 9.在一个对象上两个线程可以调用两个不同的同步实例方法吗? 不能,因为一个对象已经同步了实例方法,线程获取了对象的对象锁。所以只有执行完该方法释放对象锁后才能执行其它同步方法。看下面代码示例非常清晰:Common 类有 synchronizedMethod1()和 synchronizedMethod2()方法,MyThread

16、调用这两个方法。 59 public class Common { 60 public synchronized void synchronizedMethod1() { 61 System.out.println ("synchronizedMethod1 called"); 62 try { 63 Thread.sleep (1000); 64 } catch (InterruptedException e) { 65 e.printStackTrace (); 66 } 67 System.out.println ("synchroniz

17、edMethod1 done"); 68 } 69 70 public synchronized void synchronizedMethod2() { 71 System.out.println ("synchronizedMethod2 called"); 72 try { 73 Thread.sleep (1000); 74 } catch (InterruptedException e) { 75 e.printStackTrace (); 76 } 77 System.out.println ("synchronize

18、dMethod2 done"); 78 } 79 } 80 public class MyThread extends Thread { 81 private int id = 0; 82 private Common common; 83 84 public MyThread (String name, int no, Common object) { 85 super(name); 86 common = object; 87 id = no; 88 } 89 90 public void run () {

19、 91 System.out.println ("Running Thread" + this.getName ()); 92 try { 93 if (id == 0) { 94 common.synchronizedMethod1(); 95 } else { 96 common.synchronizedMethod2(); 97 } 98 } catch (Exception e) { 99 e.printStackTrace (); 100 } 101 } 102 103 public static vo

20、id main (String[] args) { 104 Common c = new Common (); 105 MyThread t1 = new MyThread ("MyThread-1", 0, c); 106 MyThread t2 = new MyThread ("MyThread-2", 1, c); 107 t1.start (); 108 t2.start (); 109 } 110 } 10.什么是死锁 死锁就是两个或两个以上的线程被无限的阻塞,线程之间相互等待所需资源。这种情况可能发生在当两个线程尝试获取其它资源的锁,

21、而每个线程又陷入无限等待其它资源锁的释放,除非一个用户进程被终止。就 JavaAPI 而言,线程死锁可能发生在一下情况。 当两个线程相互调用 Thread.join () 当两个线程使用嵌套的同步块,一个线程占用了另外一个线程必需的锁,互相等待时被阻塞就有可能出现死锁。 11.什么是线程饿死,什么是活锁? 线程饿死和活锁虽然不想是死锁一样的常见问题,但是对于并发编程的设计者来说就像一次邂逅一样。 当所有线程阻塞,或者由于需要的资源无效而不能处理,不存在非阻塞线程使资源可用。JavaAPI 中线程活锁可能发生在以下情形: 当所有线程在程序中执行 Object.wait (0),参数为 0 的 wait 方法。程序将发生活锁直到在相应的对象上有线程调用 Object.notify ()或者 Object.notifyAll ()。 当所有线程卡在无限循环中。

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服