黑马程序员 – 学习Java5线程并发库(4) -- 2013.1.2
来源:互联网 发布:淘宝卖高仿鞋的店铺 编辑:程序博客网 时间:2024/05/18 18:15
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
今天学习了一种设计方法,实现对ThreadLocal变量的封装,让外界不要直接操作ThreadLocal变量。
1. 对基本类型的数据进行封装,相对少见。
2. 对对象类型的封装,比较常见,既让某个类针对不同线程分别创建一个独立的实例对象。
学习总结了多个线程访问共享变量的方式,并且针对一道面试题都实现了。
1. 如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据以及操作共享数据的方法。比如买票系统就可以这么做。
2. 如果每个线程执行的代码不同,这时需要不同的Runnable对象,有两种方式可以实现。
① 将共享变量及操作共享变量的方法封装在一个对象里,再把对象传递给各个Runnable对象。
② 将共享变量和操作共享变量的方法定义在一个外部类中,把Runnable对象作为内部类。Runnable对象里的run方法调用外部类中的操作共享变量的方法。
还有第三种方式就是把上面两种方式组合起来,把共享变量及操作变量的方法都封装在一个对象里,把Runnable对象作为内部类,调用封装对象里的操作变量的方法。总之,要同步互斥的几段代码最好是放在几个独立的方法中。
关于线程池的内容在前面已有所了解,今天比较系统地回顾了一遍。学习了新内容:Callable和Future。Future取得的结果类型和Callable返回的结果类型必须一致,这是通过泛型来实现的。用来提交一组Callable任务的是CompletionService,其take方法返回最先完成的一个Callable任务对应的Future对象。
附:面试题
设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1,共100次,写出程序。
- 黑马程序员 – 学习Java5线程并发库(4) -- 2013.1.2
- 黑马程序员 – 学习Java5线程并发库(6) -- 2013.1.4
- 黑马程序员 – 学习Java5线程并发库(3) -- 2013.1.1
- 黑马程序员 – 学习Java5线程并发库(5) -- 2013.1.3
- 黑马程序员 – 学习Java5线程并发库(7) -- 2013.1.5
- 黑马程序员 – 学习Java5线程并发库(7) -- 2013.1.5
- 黑马程序员 – 学习Java5线程并发库(7) -- 2013.1.5
- 黑马程序员——Java5中的线程并发库(一)---概述、线程池、Callable和Future、Lock和Condition
- Java5 并发线程学习
- 黑马程序员:Java基础总结----线程池及java5的线程并发库
- java5线程并发库学习之Semaphore
- java5线程并发库学习之Semaphore
- java5线程并发库
- java5 线程并发库
- 黑马程序员 – 学习Java5中的多线程(2) – 2012.12.30
- 黑马程序员——Java5中的线程并发库(二)--Semaphore实现信号灯、其他同步函数、可阻塞的队列、同步集合
- 黑马程序员---线程并发库
- 黑马程序员Java学习笔记之多线程(并发)
- hadoop的hbase安装入门
- SQLiteHelper类,操作SQLite数据库
- 使用hibernate更新和删除时不能使用关系联接操作
- 安装vs2010找不到baseline数据
- 软件随想录:程序员部落酋长Joel谈软件(阮一峰译)-6
- 黑马程序员 – 学习Java5线程并发库(4) -- 2013.1.2
- 抛物样条曲线
- 幽默
- 黑马程序员 – 学习Java5线程并发库(5) -- 2013.1.3
- SQL/LINQ/Lambda 转换
- 通知activity 的方式
- 华为历史的几次重大管理变革
- 《怪诞行为学》零成本的成本
- 12306抢票插件拖垮GitHub网站