java线程池理解
来源:互联网 发布:js获取页面滚动条位置 编辑:程序博客网 时间:2024/05/22 05:07
如果开发的线程数据很多,并且每个线程都是执行一个时间很短的任务就结束了。这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。
那么有什么办法可以使的线程多次被复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?在java中可以通过线程池来达到这样的效果。
在这里的时候,我们就来补充点知识
java多线程中sleep与wait区别
wait方法:使当前线程暂停执行并释放对象锁标示,让其它线程可以进入到synchronizer方法块中,当前线程被放入对象等待池中。
notify方法:将从对象的等待池中移走一个任意线程并放到锁标示的等待池中,只有锁标志等待池中线程能够获取锁标志;如果锁标志等待池中没有线程,则notify()不起作用。
notifyAll()方法:则从对象等待池中移走所有等待那个对象的线程并放到锁标志等待池中。
共同点:
1.他们都是在多线程的环境下,都可以在程序的调用出阻塞指定的毫秒数,并返回。
2.wiat()与sleep()都可以通过interrupt()方法打断线程的暂停状态,从而使线程抛出InterruptException。
不同点:
1.Thread类的方法:sleep(),yield
Object的方法:wait()和notify()
2.每个对象都有一个锁来控制同步访问,sleep方法不会释放锁,而wait方法会释放锁
3.sleep可以在任何地方使用,而wait,noify,notifyAll只能在synchronized控制方法或者同步控制块里面使用。
使用new Thread 线程弊端
a.每次new Thread 新建对象性能差
b.线程缺乏统一管理,可能无限制新建线程,相互之间竞争,及可能占用过多系统资源导致死机
c.缺乏过多功能,定时执行,定期执行,线程中断。
相比new Thread,java提供了线程池的好处
a.重用存在的线程,减少对象创建,消亡,性能佳
b.可有效控制最大并发线程数,提高系统资源的使用率,同时可避免过多资源竞争,避免阻塞。
c.提供定时执行,定期执行
java线程池
java通过Executors提供四种线程池,分别是:
1.newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
2.newFixedThreadPool创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列里等待。
3.newScheduledThreadPool创建一个定长线程池,支持定时及周期性任务执行。
4.newSingleThreadPool创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定的顺序执行。
(1)newCachedThreadPool 创建一个可缓存数据,如果线程长度过程处理需要,可灵活回收空闲线程,如果不能回收,则新建线程
下面是该代码实现
(2)newFixedThreadPool创建一个定长线程池,可控制线程最大并发数,超过的线程会在队列里等待。
(3)newScheduledThreadPool创建一个定长线程池,并定期及周期性任务
(4)newSingleThreadPool创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定的顺序执行
- ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
- for (int i = 0; i < 10; i++) {
- final int index = i;
- singleThreadExecutor.execute(new Runnable() {
- @Override
- public void run() {
- try {
- System.out.println(index);
- Thread.sleep(2000);
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- });
- }
- java线程池理解
- Java线程池理解
- java线程池理解
- Java 线程池理解
- java线程池自己理解
- JAVA 线程池的理解
- 深入理解Java线程池
- 关于java线程池理解
- 深入理解java线程池
- 理解java中的线程池
- java线程池的理解
- JAVA线程池的理解
- 深入理解Java线程池
- 深入理解java线程池
- 深入理解Java线程池
- 深入理解Java线程池
- Java 线程池理解汇总
- java线程池 相关概念理解
- iOS回顾笔记( 01 )
- 电商产品设计:怎样设计实用的商品中心
- MB中消息集校验功能实现例子
- 近几日使用strtok的一点心得体会
- (1)caffe总结之Ubuntu 14.04 + Caffe + Cuda 7.5 + Opencv 3.0安装教程
- java线程池理解
- HTML5标签整理六
- iOS中使用RSA加密
- 如何使用jquery
- 小程序之解决移动端点击和长按事件冒泡问题
- java SSM 框架 代码生成器 websocket即时通讯 shiro redis 后台框架源码
- 制作3D效果的按钮
- java的深拷贝与浅拷贝
- opencv 填充矩形 填充多边形