线程的优化

线程优化:线程池

一个线程大约占1MB的 内存,大量创建线程,会占据大量内存,导致程序卡顿,甚至出现内存溢出异常
线程使用完毕后,等待GC回收,没有回收的时候,还在占据空间
频发创建与销毁内存,会浪费CPU
代码冗余线程池简介:(一个负责创建,销毁,复用的容器)
使用线程池后,不用关心线程的创建,销毁,复用等情况,
线程池体系结构:Executor(接口)提供的方法:execute(Runnable command);//执行线程任务ExecutorServer(子接口)提供的方法:submit(Runnable task);//提交线程任务.shutdown();//关闭线程池isshutdown();//判断是否关闭线程池isTerminated();//判断线程是否在执行AbstractExecutorSrever(子类,抽象类)ThreadPoolExecutor(子类,可以创建对象)ScheduleExecutorServer(子接口,调度线程池)提供的方法:schedule();//scheduleAtFixedRate()ThreadPoolExecutor的构造函数:ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler)参数含义:         corePoolSize:核心线程数量,即线程中最少有几个线程maximumPoolSize:线程池最大线程数量keepAliveTime:销毁时间,空闲线程多久没有时间被销毁,不会销毁核心线程unit:时间单位workQueue:存放线程任务的队列threadFactory:线程工厂handler:复用机制与算法

线程任务优化

线程任务优化原因:Runnable没有返回值,无法将run中算结果传递传递出来
思路:使用Callable,解决没有返回值问题
Callable:一个有返回值的线程任务;1.创建Callable对象,提交给线程任务;语法:2.Future<返回值> f=使用线程池对象.submit(线程任务);3.获取返回值返回的数据类型 返回值 = f.get();get()会阻塞当前线程,知道对应线程执行完并且获取到的结果.注意:不能配合Thread使用;只能使用线程池

锁的优化

原因:synchronized会导致代码结构混乱,
思路使用LOCK接口lock();关锁unlock();解锁newCondition();创建锁对象子类:ReentrantLock(互斥锁)Condition:锁对象void await();//休眠void signal();//唤醒一个 void signal();//唤醒所有ReadWriteLock(读写锁):Lock readLock():获取读的锁对象Lock writeLock();获取写的锁对象子类ReentrantReadWriteLock读与读:异步读和写:同步写与写:同步

线程优化(线程池,线程任务,锁)相关推荐

  1. 并发编程---线程queue---进程池线程池---异部调用(回调机制)

    线程 队列:先进先出 堆栈:后进先出 优先级:数字越小优先级越大,越先输出 import queueq = queue.Queue(3) # 先进先出-->队列 q.put('first') q ...

  2. python多线程队列和池_Python3 从零单排28_线程队列进程池线程池

    1.线程队列 线程队列有三种:先进先出,后进先出,按优先级进出,具体如下: 1 importqueue2 3 #先进先出 4 q = queue.Queue(3)5 6 q.put(1)7 q.put ...

  3. mongodb线程池_常用高并发网络线程模型设计及MongoDB线程模型优化实践

    服务端通常需要支持高并发业务访问,如何设计优秀的服务端网络IO工作线程/进程模型对业务的高并发访问需求起着至关重要的核心作用. 本文总结了了不同场景下的多种网络IO线程/进程模型,并给出了各种模型的优 ...

  4. 史上最强多线程面试44题和答案:线程锁+线程池+线程同步等

    最全BAT必考题答案系列 最全MySQL面试60题和答案 史上最全Spring面试71题与答案 史上最全Redis面试49题(含答案):哨兵+复制+事务+集群+持久化等 分布式缓存Redis+Memc ...

  5. Android性能优化之使用线程池处理异步任务

    说到线程,我想大家都不陌生,因为在开发时候或多或少都会用到线程,而通常创建线程有两种方式: 1.继承Thread类 2.实现Runnable接口 虽说这两种方式都可以创建出一个线程,不过它们之间还是有 ...

  6. java同步锁售票_Java基础学习笔记: 多线程,线程池,同步锁(Lock,synchronized )(Thread类,ExecutorService ,Future类)(卖火车票案例)...

    学习多线程之前,我们先要了解几个关于多线程有关的概念. 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 线程:线程是 ...

  7. 递归锁、信号量、GIL锁、基于多线程的socket通信和进程池线程池

    递归锁.信号量.GIL锁.基于多线程的socket通信和进程池线程池 递归锁 死锁现象:是指两个或两个以上的进程和线程因抢夺计算机资源而产生的一种互相等待的现象 from threading impo ...

  8. java并发包线程池原理分析锁的深度化

    java并发包&线程池原理分析&锁的深度化 并发包 同步容器类 Vector与ArrayList区别 1.ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素 ...

  9. 《码农翻身》--知识点总结--01我是一个线程---线程生命周期、线程池、缓存、锁

    一.线程的生命周期 当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态. 在线程的生命周期中,它要经过 新建(New).就绪(Runnable).运行(Running).阻 ...

最新文章

  1. 查找所有的(字符相同但顺序不同) Find All Anagrams in a String
  2. 每个网站SEO优化人员都要熟知的三大图片优化技巧
  3. JVM 垃圾回收算法及回收器详解
  4. DL之VGG16:基于VGG16(Keras)利用Knifey-Spoony数据集对网络架构FineTuning
  5. 文件上传案例的客户端
  6. 图像处理之添加图像水印
  7. 大数据导论章节答案_托福100+需要准备多久?考生大数据给你答案
  8. html5简介、选项输入框、表单元素分组、input新增属性及属性值
  9. UI设计案例|文件管理App界面设计灵感
  10. python多进程调试_使用pyrasite进行python进程调试,改变运行中进程的代码
  11. Delphi编程分割图片的方法
  12. H - 数论中的异或 HRBUST - 1688
  13. Android-APP 安全(六)之android取证
  14. mac忘记mysql初始密码怎么办_Mac下忘记Mysql密码重新设置密码的图文教程
  15. 透视条件(Condition)技术
  16. 高考数学试题等差数列及其前n项和解题思维|附习题
  17. 从捕获的网络流量包提取数据
  18. 相机溯源之传统方法(PRNU提取)
  19. TCP粘包以及粘包处理
  20. 社团管理系统软件测试,软件测试大作业——社团管理系统(19页)-原创力文档...

热门文章

  1. setsockopt用法描述
  2. php 文字弹幕效果代码,视频弹幕特效代码
  3. biosrecovery什么意思_BIOS是什么意思``
  4. 冯唐:年轻人到底挣多少钱算够?
  5. 简述C#中IO的应用
  6. python开心消消乐辅助_用Python写个开心消消乐小游戏
  7. WiFi万能钥匙总裁:下一步重点是场景化大数据
  8. mysql数据库表更新_MySQL更新表数据
  9. 数据完整性、存储过程、函数
  10. 关于5G系统天线的原理