首页
Search
1
JAVA垃圾回收
994 阅读
2
Kafka、RocketMQ消息队列总结
981 阅读
3
Flink on Kubernetes 计算和存储分离落地实践
970 阅读
4
Linux免密登陆-ubuntu
904 阅读
5
Redis集群部署方案
890 阅读
大数据
Flink
后端
Java
笔记
运维
游客
Search
标签搜索
大数据
Flink
离线
实时
Redis
OpenJDK
Java
笔记
JVM
Elasticsearch
GC
Hadoop
Hudi
Flink CDC
K8S
数据湖
TOTC
累计撰写
307
篇文章
累计阅读
104.3万
次
首页
栏目
大数据
Flink
后端
Java
笔记
运维
页面
搜索到
6
篇与
Java
的结果
返回首页
2013-06-29
JAVA线程池总结
Executors类提供了4种不同的线程池 1.newCachedThreadPool ——SynchronousQueue2.newFixedThreadPool ——LinkedBlockingQueue3.newScheduledThreadPool4.newSingleThreadExecutor ——LinkedBlockingQueue{lamp/}参数 corePoolSize 线程池核心线程大小。maxPoolSize 线程池最大线程数量,如果工作队列满了,才会创建一个新线程。keepAliveTime 空闲线程存活时间。unit 空间线程存活时间单位,keepAliveTime的计量单位。{lamp/}workQueue 工作队列 ArrayBlockingQueue :生产和消费用的是同一个锁;必须指定大小(有界)。LinkedBlockingQueue :锁是分离的;转换为Node<E>进行插入或移除、会生成额外的Node对象、对GC有影响都可以;不指定大小时(无界),生产速度大于消费速度时候,有可能会内存溢出。PriorityBlockingQueue SynchronousQuene ,newCachedThreadPool,操作必须是放和取交替完成。threadFactory,设定线程名、是否为daemon线程,守护线程。allowCoreThreadTimeoutRejectedExecutionHandler 拒绝策略 AbortPolicy ,丢弃任务并抛出异常,默认。DiscardPolicy ,丢弃任务。DiscardOldestPolicy ,丢弃队列最前面的任务,然后重新提交被拒绝的任务。不和优先级队列同时使用。CallerRunsPolicy ,由调用线程处理该任务 导致程序阻塞,性能效率上必然的损失较大。{lamp/}默认配置 corePoolSize = 1 queueCapacity = Integer.MAX_VALUE maxPoolSize = Integer.MAX_VALUEkeepAliveTime = 60秒 allowCoreThreadTimeout = false rejectedExecutionHandler = AbortPolicy(){lamp/}corePoolSize、maxPoolSize根据机器资源配置相同的值根据峰值持续的时间设置allowCoreThreadTimeout = true、keepAliveTime来动态控制存活线程的数量。自定义任务队列,可以根据当前并发量,通过简单的管理页面随时动态调整队列的长度(保证线程安全的前提下)。{lamp/}ThreadLocal 每个线程都会有这个变量的一个副本。Thread类中有两个变量,是ThreadLocal.ThreadLocalMap ThreadLocalMap的key是ThreadLocal的弱引用,在没有其他地方对ThreadLoca依赖时,ThreadLocalMap中的ThreadLocal对象就会被回收掉,但是对应的value不会被回收,Map中就可能存在key为null但是value不为null的项,所以使用完毕及时调用remove方法避免内存泄漏。
2013年06月29日
1,035 阅读
85 点赞
1
2