java并发学习 读书笔记二

本文介绍了Java中的Executor框架,包括不同类型的线程池及其应用场景,如定长线程池、可缓存线程池等。此外还介绍了完成服务CompletionService、SwingUtilities工具类、Future接口、死锁现象及预防措施、Amdahl定律等内容。
Executor框架介绍

1、Executor框架提供了一个灵活的线程池实现,防止应用程序过载而耗尽内存。它是基于生产者-消费者模式的,提交任务的线程是生产者,执行任务的线程是消费者。

2、线程池
newFixedThreadPool创建一个定长的线程池,每当提交一个任务就创建一个线程,直到达到池的最大长度,这是线程池会保持长度不再变化(如果一个线程由于非预期的Exception而结束,线程池会补充一个新的线程)。
newCachedThreadPool创建一个可缓存的线程池,如果当前线程池的长度超过了处理的需要时,它可以灵活地回收空闲的线程。当需求增加时,它可以灵活的添加新的线程,而并不会对池的长度作任何限制。
newSingleThreadExecutor创建一个单线程化的executor,它只创建唯一的工作者线程来执行任务,如果这个线程异常结束,会有另一个取代它。executor会保证任务依照任务队列所规定的顺序(FIFO,LIFO,优先级)执行。
newScheduledThreadPool创建一个定长的线程池,而且支持定时的以及周期性的任务执行。

3、完成服务CompletionService
CompletionService整合了Executor和BlockingQueue的功能,你可以将Callable任务提交给它去执行,然后使用类似队列中take和poll方法,在任务结果完整可用时获得这个结果。

4、SwingUtilities.invokeAndWait,它可以安排一个Runnable任务在事件派发线程中执行,并会阻塞当前线程直到它完成(只能从非GUI线程中调用,否则会发生死锁)
SwingUtilities.invokeAndLater,它可以安排一个Runnable任务在事件派发线程中执行(可从任意线程中调用)

5、Future是被设计来处理可取消任务,所以遇到任务处理有取消需求时,可以考虑用Future

6、发生死锁的原因:两个或者多个线程企图以不同的顺序获得相同的多个锁时会发生
例子:
public class LeftRightDeadLock{
private Object left = new Object();
private Object right = new Object();

public void leftRight(){
synchronized(left){
synchronized(right){
doSomething();
}
}
}

public void rightLeft(){
synchronized(right){
synchronized(left){
doSomething();
}
}
}
}


7、Amdahl定律
Amdahl定律描述了在一个系统中,基于可并行化和串行化组件各自所占的比重,程序通过获得额外的计算资源,理论上能够加速多少。如果F是必须串行化执行的比重,N代表处理器数,提速公式为:
SpeedUp <= 1/ (F + (1 - F)/N)

8、创建Lock/ReentrantLock机制的意义
内部锁在大部分情况下都能很好的工作,但是有一些功能上的局限--不能中断那些等待获取锁的线程,并且在请求锁失败的情况下只能无限等待。内部锁必须在获取它的代码中释放;这很好的简化了代码,与异常处理机制能够良好的互动。但在某些情况下,一个更灵活的加锁机制提供了更好的活跃度和性能。
基于遗传算法的新的异构分布式系统任务调度算法研究(Matlab代码实现)内容概要:本文档围绕基于遗传算法的异构分布式系统任务调度算法展开研究,重点介绍了一种结合遗传算法的新颖优化方法,并通过Matlab代码实现验证其在复杂调度问题中的有效性。文中还涵盖了多种智能优化算法在生产调度、经济调度、车间调度、无人机路径规划、微电网优化等领域的应用案例,展示了从理论建模到仿真实现的完整流程。此外,文档系统梳理了智能优化、机器学习、路径规划、电力系统管理等多个科研方向的技术体系与实际应用场景,强调“借力”工具与创新思维在科研中的重要性。; 适合人群:具备一定Matlab编程基础,从事智能优化、自动化、电力系统、控制工程等相关领域研究的研究生及科研人员,尤其适合正在开展调度优化、路径规划或算法改进类课题的研究者; 使用场景及目标:①学习遗传算法及其他智能优化算法(如粒子群、蜣螂优化、NSGA等)在任务调度中的设计与实现;②掌握Matlab/Simulink在科研仿真中的综合应用;③获取多领域(如微电网、无人机、车间调度)的算法复现与创新思路; 阅读建议:建议按目录顺序系统浏览,重点关注算法原理与代码实现的对应关系,结合提供的网盘资源下载完整代码进行调试与复现,同时注重从已有案例中提炼可迁移的科研方法与创新路径。
【微电网】【创新点】基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度研究(Matlab代码实现)内容概要:本文提出了一种基于非支配排序的蜣螂优化算法(NSDBO),用于求解微电网多目标优化调度问题。该方法结合非支配排序机制,提升了传统蜣螂优化算法在处理多目标问题时的收敛性和分布性,有效解决了微电网调度中经济成本、碳排放、能源利用率等多个相互冲突目标的优化难题。研究构建了包含风、光、储能等多种分布式能源的微电网模型,并通过Matlab代码实现算法仿真,验证了NSDBO在寻找帕累托最优解集方面的优越性能,相较于其他多目标优化算法表现出更强的搜索能力和稳定性。; 适合人群:具备一定电力系统或优化算法基础,从事新能源、微电网、智能优化等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于微电网能量管理系统的多目标优化调度设计;②作为新型智能优化算法的研究与改进基础,用于解决复杂的多目标工程优化问题;③帮助理解非支配排序机制在进化算法中的集成方法及其在实际系统中的仿真实现。; 阅读建议:建议读者结合Matlab代码深入理解算法实现细节,重点关注非支配排序、拥挤度计算和蜣螂行为模拟的结合方式,并可通过替换目标函数或系统参数进行扩展实验,以掌握算法的适应性与调参技巧。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值