《Java并发编程实战》1.基础知识

二、什么是线程安全

        当多个线程访问某个类时,不管运行时采用的何种调度方式或者这些线程如何交替执行,并且再主调度代码也不需要任何额外的同步或者协同,这个类能表现出正确的行为,那么这个类就是线程安全的。
 

三、对象共享

线程封闭
  • 栈封闭:栈封闭中,只能通过局部变量才能访问对象。
  • ThreadLocal类:使用ThreadLocal存储变量。
只读共享
        不可变:对象不能修改,对象的所有域是final,对象创建时没有逸出。
 
线程安全共享
        在对象内部实现同步,多线程通过对象公共接口访问。
 
保护对象
        通过持有特定的锁进行访问,如外部使用synchronize或者lock
 

五、基础构建模块

 
并发容器
  • ConcurrentHashMap: jdk1.7之前采用分段锁,1.7之后对hash表的head加锁,若head为空,则使用CAS设置head。
  • CopyOnWriteArrayList:在写入时复制,读取的还是原先的列表,当写入完成,则进行赋值。
生产者-消费者
  • BlockingQueue:支持可阻塞的take与put。
  • Deque:双端队列,工作密取,消费者共享一个工作队列,都有一个各自的双端队列,当自己的队列为空时,可以从其他的双端队列的尾部获取。
同步工具类
  • CountDownLatch:设置一个数3,await阻塞等待,当 countDown时减1,到减少到0时,await线程唤醒。
  • FutureTask:在使用线程池异步处理任务时,可使用future.get等待处理完成。
  • Semaphore:设置一个数3,使用时调用 acquire减1,调用release加1,当 acquire时已经为0,则阻塞。
  • CyclicBarrier:设置一个数3,调用 await减1并阻塞,当减少到0时,唤醒所有阻塞线程,并恢复到3。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值