线程优化(线程池,线程任务,锁)

线程的优化

线程优化:线程池

一个线程大约占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
	读与读:异步
	读和写:同步
	写与写:同步
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值