26Java多线程和并发面试题(附答案)11~16题.docx





《26Java多线程和并发面试题(附答案)11~16题.docx》由会员分享,可在线阅读,更多相关《26Java多线程和并发面试题(附答案)11~16题.docx(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Java多线程和并发面试题(附答案)1116题11.同一个类中的2个方法都加了同步锁,多个线程能同时访问同一个类中的这两个方法吗?这个问题需要考虑到Lock与synchronized两种实现锁的不同情形。因为这种情况下使用Lock和synchronized会有截然不同的结果。Lock可以让等待锁的线程响应中断,Lock获取锁,之后需要释放锁。如下代码,多个线程不可访问同一个类中的2个加了 Lock锁的方 法。java.util.concurrent.locks.Lock;java.util.concurrent.locks.ReentrantLock;private nl count = 0;
2、pri vat,- Lock lock = now ReentrantLock ();方法pe r c Runnable runl - new Runnable () pub I i c 1 run () lock.lock();whi 1 e (count 1000) 打印是否执行该方7System.out .printin (Thread. currentThread () .getName () + “ mini: + count:+);(Exception e) e.printstackTrace();lock.unlock();I)i: i i c Runnable run2 = n
3、c、 Runnable () ! run () System.out .printin (七Name + ”获取到锁!”);System. out .printIn (tName + 获取不至U锁!”); (:(Exception e) e.printStackTrace();System.out .printin (当前的线程是+ Thread. currentThread () .getName () + ”释放锁! !”);tl.start () ;|Thread 七2 = Thread( Runnable () String tName = Thread.currentThread()
4、.getName();/ TODO Auto-generated method stu tdl.flag = 1;try获取不到锁,就等5秒,如果5秒后还是获取不到就返回falsei (lock.tryLock (500(), TimeUnit .MILLISECONDS) ) ,System, out.println (tName + ”获取到锁! else System, out .printin (tName + ”获取不至U锁!”);reinrn; (:(Exception e) e.printStackTrace(); ca :h (Exception e) System.out.p
5、rintin (tName + 出错 j! ! !”); finally System.out .printin (“当前的线程是 + Thread. currentThread () .getName () + ”释放锁! !”);lock.unlock();t2.start();打印结果:Thread-0获取到锁!当前的线程是Thread-0 flag的值1当前的线程是Thread-0释放锁! !Thread1获取到锁!当前的线程是Thread-1 flag的值0当前的线程是Thread-1释放锁! !13Java中多线程间的通信怎么实现?线程通信的方式:共享变量线程间通信可以通过发送信号
6、,发送信号的一个简单方式是在共享对象的变量里设置信号值。线程A在一个同步块里设置boolean型成 员变量hasDataToProcess为true,线程B也在同步块里读取hasDataToProcess这个成员变量。这个简单的例子使用了一个持有信号 的对象,并提供了 set和get方法:k:、com.bjpowernode;UySignalp:H 11( (:)()I hasDataToProcess =;public boolean getHasDataToProcess() hasDataToProcess;setHasDataToProcess( 乂: hasDataToProcess
7、) .hasDataToProcess = hasDataToProcess;:-;i II.-1. . :.;: :”“7/.1: ,;:, :辑i Thread tl =:1(。Thread (w Runnable。public void run()my . soLH,;:3:;Pr () ;|8|Thread t2 = nc、 Thread (me Runnable () ca、h (工nterruptedException e) System.out .printin (tl 改变以后的值: + my. isHasDataToProcess ();t2.start();结果:tl改变以
8、后的值:true wait/notify 机制以资源为例,生产者生产一个资源,通知消费者就消费掉一个资源,生产者继续生产资源,消费者消费资源,以此循环。代码如下:com. b j powe r node;3 一二】匚 q 3 三二C: ;Iflag =l ;l i( synchroni z(d -()i(1 set (String name) 生产资源线程等待。消费者消费资初wait (); ca ( (Exception e) this.name = name + + count+;System, out .printin (Thread. currentThread (). getNam(
9、)+ 生产者. + his.name);唤醒等待中的消费者pub i.(I 川 d out () calch (Exception e) System, out .printin (Thread. currentThread (), getName () + .1肖费者. + his, name);唤醒生产者,生产资源I 3( 心、Producer ii:j:Runnable iConsumerRunnable pub run() 1(:,) res.out();ProducerConsumerDemo l)i:) c s i : imain (StringE args)Resource r
10、= Resource ();Producer pro = Producer(r);Consumer con = Consumer(r);Thread tl = i:(、 Thread (pro);Thread t2 = i Thread(con);tl.start ();t2.start ();14 .线程和进程的区别?进程:具有一定独立功能的程序关于某个数据集合上的一次运行活动,是操作系统进行资源分配和调度的一个独立单位。线程:是进程的一个实体,是cpu调度和分派的基本单位,是比进程更小的可以独立运行的基本单位。特点:线程的划分尺度小于进程,这使多线程程序拥有高并发性,进程在运行时各自内存单
11、元相互独立,线程之间内存共享,这使多线 程编程可以拥有更好的性能和用户体验。注意:多线程编程对于其它程序是不友好的,占据大量cpu资源。15 .请说出同步线程及线程调度相关的方法?wait():使一个线程处于等待(阻塞)状态,并且释放所持有的对象的锁;sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要处理Interrupted Exception异常;notifyO :唤醒一个处于等待状态的线程,当然在调用此方法的时候,并不能确切的唤醒某T等待状态的线程,而是由JVM确定唤醒 哪个线程,而且与优先级无关;notityAIIO :唤醒所有处于等待状态的线程,该方法并不
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 26 Java 多线程 并发 试题 答案 11 16

限制150内