Java并发库

:Java并发库:(重要)

Java1.5以后为了解决多线程并发,死锁等问题引入的工具包。java.util.concurrent。

包含:

ExecutorService:线程池,submit有返回值,而execute没有

1.减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。

2.可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为消耗过多的内存,而把服务器累趴下(每个线程需要大约1MB内存,线程开的越多,消耗的内存也就越大,最后死机)。

线程池中有一个atomiticInteger的对象ctl,记录了"线程池中的任务数量"和"线程池状态"2个信息。线程池的5种状态是:Running(新建直接就是这个状态), SHUTDOWN(线程池处在SHUTDOWN状态时,不接收新任务,但能处理已添加的任务。调用线程池的shutdown()接口时,线程池由RUNNING -> SHUTDOWN), STOP(线程池处在STOP状态时,不接收新任务,不处理已添加的任务,并且会中断正在处理的任务。调用线程池的shutdownNow()接口时), TIDYING(当所有的任务已终止,ctl记录的"任务数量"为0,线程池会变为TIDYING状态。当线程池变为TIDYING状态时,会执行钩子函数terminated()。), TERMINATED(线程池彻底终止,就变成TERMINATED状态。)。

 

Semaphore:通常用于限制可以访问某些资源(物理或逻辑的)的线程数目。如9个人排队等见3个人。acquire,release

 

ReentrantLock:重入锁,condition.await(),condition.signal(),lock,unlock

Condition的基本使用如下:

*Condition是个接口,基本的方法就是await()和signal()方法;

*Condition依赖于Lock接口,生成一个Condition的基本代码是lock.newCondition()

* 调用Condition的await()和signal()方法,都必须在lock保护之内,就是说必须在lock.lock()和lock.unlock之间才可以

* 和Object.wait()方法一样,每次调用Condition的await()方法的时候,当前线程就自动释放了对当前锁的拥有权

http://outofmemory.cn/java/java.util.concurrent/lock-reentrantlock-condition

 

BlockingQueue:阻塞队列

ScheduledExecutorService:方法使用各种延迟创建任务,可安排在给定的延迟后运行或定期执行的命令。

池量重阻计。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值