- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
Java多线程笔试题及答案
一、选择题(每题5分,共25分)
以下哪种方式不能创建Java线程?()
A.继承Thread类并重写run()方法
B.实现Runnable接口并重写run()方法
C.实现Callable接口并重写call()方法
D.直接调用Thread类的start()方法
关于synchronized关键字,下列说法错误的是?()
A.synchronized可修饰方法和代码块
B.被synchronized修饰的方法,同一时间只能有一个线程执行
C.synchronized修饰静态方法时,锁的是类对象
D.synchronized不会造成线程死锁
线程的生命周期中,不会出现的状态是?()
A.就绪状态(Runnable)
B.运行状态(Running)
C.阻塞状态(Blocked)
D.终止状态(Terminated)
E.挂起状态(Suspended)
下列关于ThreadLocal的说法,正确的是?()
A.ThreadLocal存储的数据是线程共享的
B.ThreadLocal可解决多线程并发访问共享变量的安全问题
C.每个线程通过ThreadLocal获取到的变量是独立的
D.ThreadLocal会导致内存泄漏,无法避免
线程池的核心参数中,用于控制线程池最大线程数量的是?()
A.corePoolSize
B.maximumPoolSize
C.keepAliveTime
D.workQueue
二、简答题(每题10分,共30分)
简述sleep()方法和wait()方法的区别。
什么是线程安全?列举两种保证线程安全的实现方式,并说明原理。
简述ConcurrentHashMap在JDK1.7和JDK1.8中的实现差异。
三、编程题(每题15分,共30分)
请用Java实现一个线程安全的单例模式(要求:懒加载、效率高)。
现有10个线程,要求让这10个线程按顺序执行(例如:线程1执行完后,线程2才能执行,以此类推),请写出实现代码。
四、分析题(15分)
阅读以下代码,分析是否存在线程安全问题?若存在,说明问题原因并修改代码;若不存在,说明理由。
publicclassCounter{
privateintcount=0;
publicvoidincrement(){
count++;
}
publicintgetCount(){
returncount;
}
publicstaticvoidmain(String[]args)throwsInterruptedException{
Countercounter=newCounter();
for(inti=0;i1000;i++){
newThread(()-{
for(intj=0;j1000;j++){
counter.increment();
}
}).start();
}
Thread.sleep(1000);
System.out.println(最终计数:+counter.getCount());
}
}
答案
一、选择题
D(解析:start()方法用于启动线程,不能直接创建线程;Callable需配合FutureTask使用,可创建线程)
D(解析:当多个线程互相持有对方需要的锁时,会造成死锁,synchronized可能引发此问题)
E(解析:Java线程生命周期官方定义为:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked/Waiting/TimedWaiting)、终止(Terminated),无挂起状态)
C(解析:ThreadLocal为每个线程维护独立变量副本,A错误;它不解决共享变量问题,B错误;通过及时remove()可避免内存泄漏,D错误)
B(解析:corePoolSize是核心线程数,maximumPoolSize是最大线程数)
二、简答题
sleep()与wait()的区别:
所属类不同:sleep()是T
文档评论(0)