一个JAVA面试题
来源:互联网 发布:淘宝买发票怎么搜 编辑:程序博客网 时间:2024/06/04 19:01
具体题目不记得了,大概实现:多线程中对某个共享的数据进行修改,保证线程安全,用内部类隐藏这些操作。
package jav;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock; class FooBar{private int i; // 多线程共享的数据private ExecutorService exec; //多线程执行器private Lock lock = new ReentrantLock(); //互斥锁public FooBar() {int i = 0;exec = Executors.newCachedThreadPool();}/*模拟某个阻塞的操作*/private void blocking(){try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}public void shutdown(){exec.shutdown();}public String toString(){return "the value is :" + i;}public void syncIncrease(){/*匿名内部类,隐藏多线程操作*/exec.execute(new Runnable() {@Overridepublic void run() {lock.lock();//上锁try{System.out.println("starting increasing: " +i);++i;blocking();//阻塞在此处,增加临界区++i;System.out.println("increased: " + i);} finally{lock.unlock(); //释放锁}}});}public void syncDecrease(){/*匿名内部类,隐藏多线程操作*/exec.execute(new Runnable() {@Overridepublic void run() {lock.lock();//上锁try{System.out.println("starting decreasing: " +i);--i;blocking();//阻塞在此处,增加临界区--i;System.out.println("decreased: " +i);} finally{lock.unlock();//释放锁}}});}}public class main {public static void main(String[] args){FooBar fb = new FooBar();for (int i = 0; i < 5; ++i){//对某个共享数据进行修改的两个操作,已经用内部类进行隐藏多线程fb.syncIncrease();fb.syncDecrease();}System.out.println("no blocking!");//立即返回fb.shutdown();//清除处理}}
查看输出:
starting increasing: 0
no blocking!
increased: 2
starting decreasing: 2
decreased: 0
starting increasing: 0
increased: 2
starting decreasing: 2
decreased: 0
starting increasing: 0
increased: 2
starting decreasing: 2
decreased: 0
starting increasing: 0
increased: 2
starting decreasing: 2
decreased: 0
starting increasing: 0
increased: 2
starting decreasing: 2
decreased: 0
共识的数据已经被锁保护了
0 0
- 一个Java面试题
- 一个JAVA面试题
- java面试题十八 switch一个考题
- 一个java面试题引发的思考
- 一个有趣的java面试题
- 一个很无耻的Java面试题
- 一个公司面试题~!
- 一个数据库面试题
- 一个面试题
- 一个面试题
- 一个sql面试题
- 一个SQL面试题
- 一个面试题
- 一个面试题
- 一个SQL面试题
- 一个小面试题
- 一个面试题
- 腾讯面一个试题
- 缩略图缓存清除(仅win7)
- Android Service
- wireshark 卡死,不能运行,进度显示100%,"Loading configuration files 的解决办法
- 算法学习(Java实现之字符串篇)····二进制求和
- "晴天"天气app的开源库逐步学习(四)
- 一个JAVA面试题
- 异常
- Gallery 实现图片逐一展示 和 显示当前图片张数
- UVA - 12470 Tribonacci 矩阵快速幂
- 真正的轻量级WebService框架——使用JAX-WS(JWS)发布WebService
- 明源售楼系统技术解析 销售控制(更名查询与变更查询)
- RAC下启动日志归档模式
- 某文件的权限为d-rw-_r--_r--,用数值形式表示该权限,则八进制数为644,文件属性为目录,为什么呢?(最近在复习linux,明天考试, 今天先总结下)
- [转发]霍夫变换直线检测的基本原理