`
zyslovely
  • 浏览: 227739 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java线程学习(2)

 
阅读更多
线程安全集合
1.阻塞队列:使用生产者消费者的理论完成线程操作
方法
add            添加一个元素           如果队列满,抛出异常
element     返回队列的头元素     如果队列空,抛异常
offer          添加一个元素并返回true   如果队列满,返回false
peek          返回队列的头元素     如果队列空,返回false
poll            移出并返回队列的头元素   如果队列空,返回null
put             添加一个元素          如果队列满,则阻塞
remove       移出并返回头元素    队列空,抛异常
take            移出并返回头元素    如果空,则阻塞

如果队列当作线程管理工具来使用,将用到put和take方法

linkedBlockingQueue的容量是没有边界的
ArrayBlockingQueue在构造是需要制定r哦n量,并且由一个可选的参数来制定是否需要公平性。
PriorityBlockingQueue是一个带优先级的队列,没有容量上线,如果队列为空,取元素的操作会阻塞

2.concurrent包提供了映像、有序集和队列的高效实现
1.ConcurrentHashMap
2.ConcurrentSkipListMap
3.ConcurrentSkipListSet
4.ConcurrentLinkedQueue

构建一个新的线程是有一定代价的,因为设计与操作系统的交互。如果程序中创建了大量的声明期很短的线程,应该使用线程池。
另一个使用线程池的理由是减少并发线程树木。创建大量线程会大大降低性能


使用连接池时应该做的事:
1.调用Executors类中静态的方法newCachedThreadPool或newFixedThreadPool
2.调用submit提交runnable或callable对象
3.如果想要取消一个任务,或如果提交callable对象,那就要保存好返回的future对象
4.当不再提交任何任务时,调用shutdown

Callable与Future
Runnable封装了一个异步运行的任务,可以把它想像称为一个没有参数和返回值的异步方法
Callable与Runnable类似,但是有返回值。Callable接口时一个参数化的类型,只有一个方法call.
Future保存异步计算的结果。可以启动一个计算,将Future对象交给某个线程,然后忘掉它
Future对象的所有者再结果计算好之后就可以获得它

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics