java多线程编程学习之 浅谈Thread与java集合框架对象

在撰写multithreaded(多线程的)程序的时候,使用java 集合对象最重要的问题是如何管理这些数据的同步访问问题,基于java集合对象的数据同步问题可以有两种管理策略:

第一种策略:让java集合框架中那些自身已经在设计上具备“数据同步”特性的集合类型对象自行管理其数据的同步访问问题!(让具有同步特性的集合对象自行管理)

第二种策略:用程序员自行开发的同步化的程序代码段来管理对java集合对象的访问!(开发人员自己设计同步化的程序来管理与访问java集合对象(数据资源对象))


注意:第一种策略不是绝对安全的,因为你是保证了对集合对象中数据存取的安全(这个局部线程安全性,数据存取的同步性!)但是你没有保障程序代码在整体事务性操作上的同步性!因此,还是推荐使用第二种策略!即使用具有“线程安全性”的java集合对象并不能保证“整体事务性程序”的同步安全性!即不能保证程序的正确性,只能保证集合对象中数据"存取"的同步性安全性!不能保证整体程序的"事务程序"(业务型事务)逻辑上的同步性!(事务操作具有一致性,持久性,隔离性,原子性),更通俗地讲:具有线程安全性的java集合对象(具有同步访问安全性的java集合对象)仅仅能保证对该集合对象中保存的数据的存取具有线程安全性(同步访问的特性),而并不能保证使用了该java集合对象(具有同步访问安全性(多线程并发访问安全性)(线程安全性)的java集合对象)的本应具有事务性逻辑业务程序段也具有线程安全性(也可以理解为事务的隔离性(事务锁的概念))(多线程并发访问该程序段也要求具有同步安全性)!因此必要的同步代码书写在具有事务隔离特性的业务代码段上,是很有必要的,也是推荐的策略!而不管该程序段使用的java集合对象是否是具有线程安全性的java集合对象了!因为在这种情况下还是用具有线程安全性的java集合对象的意义不大了!(因为通过设计同步程序段(线程安全性的同步程序代码段)可间接实现该代码段对其调用的java集合对象的同步锁方式的安全访问(线程安全方式的存取访问了))

————————————————————————————

篇外话题:

 在具有线程特性的程序中很常见的一种设计模式是"生产者-消费者"模式,加入到J2SE5.0中的Queue类型的集合对象就是特定为这个模式所设计的.Queue最适合生产者/消费者模式的应用.

要明白什么是阻塞队列,你就必须先明白什么是队列
____________________________________________
队列:具有先进先出特性的数据结构,队列是个数据元素集合,且队列具有FIFO的算法特性,它会让存放在它内部的数据元素按照存放顺序具有"先进入队列者就是先出队列者"的排队特性!
__________________________________________________________________
那什么又是阻塞队列呢?
答案:就是具有"阻塞"特性的"队列",即阻塞队列首先得具有队列的特性(队列中排队的数据元素先进先出),第二它具有独特的"阻塞特性":阻塞队列的阻塞特性表现在,当阻塞队列的容量区内没有数据元素时,你对该阻塞队列对象发送"让第一名元素出队列"的消息,则该操作会被"阻塞",这是因为队列内并无可用的数据元素可出队列,"巧媳妇难做无米之炊"(调用方法处会阻塞等待执行,直到该队列中真的有值(元素,即可取出的元素)被取出并返回为止,调用程序才能够继续得以执行(即解除阻塞状态!)),反之当一个阻塞队列中被指定了容量大小且当该队列中的容量区已满时,再想往该已满的阻塞队列中的容量区内存放新的数据元素,那么这个消息也会被阻塞,直到该已满的阻塞队列对象中有一个第一名元素出队列完毕为止,此时队列变成"未满"的状态,它才会解除对入队列消息(操作)(方法)的阻塞,使得调用程序得以继续执行!(通读理解)
_______________________________________________________________________________________________________
总结:
对空的阻塞队列执行出队列操作,该操作方法会被阻塞方式执行(直到该队列中有元素该操作才会被解除阻塞),对满的阻塞队列执行入队列操作,该操作同样会被阻塞式的执行(直到该队列中腾出了至少一个空闲位置的时候该操作才会被解除阻塞)! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值