首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

转)深入研究ReentrantLock(重入锁)之引来话题篇

2013-08-06 
转)深入研究ReentrantLock(重入锁)之引出话题篇?public ? class ?Reader? extends ?Thread?{??? ????????p

转)深入研究ReentrantLock(重入锁)之引出话题篇

?

            public ? class ?Reader? extends ?Thread?{??? ????????private ?BufferInterruptibly?buff;??? ????????public ?Reader(BufferInterruptibly?buff)?{??? ????????this .buff?=?buff;??? ????}???????????@Override ??? ????public ? void ?run()?{??? ????????????try ?{??? ????????????buff.read();//可以收到中断的异常,从而有效退出? ?? ????????}?catch ?(InterruptedException?e)?{??? ????????????System.out.println("我不读了" );??? ????????}?????????????????????System.out.println("读结束" );??? ????????}???????}???????/**? ?*?Writer倒不用怎么改动? ?*/ ??? public ? class ?Writer? extends ?Thread?{??? ????????private ?BufferInterruptibly?buff;??? ????????public ?Writer(BufferInterruptibly?buff)?{??? ????????this .buff?=?buff;??? ????}???????????@Override ??? ????public ? void ?run()?{??? ????????buff.write();???????}???????}???????public ? class ?Test?{??? ????public ? static ? void ?main(String[]?args)?{??? ????????BufferInterruptibly?buff?=?new ?BufferInterruptibly();??? ????????????final ?Writer?writer?=? new ?Writer(buff);??? ????????final ?Reader?reader?=? new ?Reader(buff);??? ????????????writer.start();???????????reader.start();???????????????new ?Thread( new ?Runnable()?{??? ????????????????@Override ??? ????????????public ? void ?run()?{??? ????????????????long ?start?=?System.currentTimeMillis();??? ????????????????for ?(;;)?{??? ????????????????????if ?(System.currentTimeMillis()??? ????????????????????????????-?start?>?5000 )?{??? ????????????????????????System.out.println("不等了,尝试中断" );??? ????????????????????????reader.interrupt();???????????????????????????break ;??? ????????????????????}???????????????????????}???????????????????}???????????}).start();???????????}???}???

          这次“读”线程接收到了lock.lockInterruptibly()中断,并且有效处理了这个“异常”。好奇的读者,肯定要探个究竟,为什么ReentrantLock能做到这点,接下来,我们去迷宫探险吧

热点排行