Java多线程基础

一、Java多线程的优势:

1.合理的多线程使用可以加快程序的开发;

2.多线程可以有效发挥多处理器功能;

3.多线程可以降低用户的等待时间,增加用户体验感。


二、Java多线程存在的几个常见问题:

1.安全性问题("永远不发生糟糕的事情")

多个线程同时操作共享变量时,可能会带来 意想不到的结果;

比如对同一个局部变量进行自增操作时(不满足原子性),可能得到的结果与预想结果不一致。


无状态对象(既不包括任何域,也不包括任何对其它类中域的引用)不需要考虑线程安全性或者说无状态对象就是线程安全的。

线程安全性存在于对 共享“ ”可变“状态的访问上

共享:变量可以被多个线程同时访问;

可变:变量值可以被修改。


线程安全主要体现:

原子性(即对同一共享可变变量的一组不可分割操作)

-->竞态条件

-->延迟初始化中的竞态条件

-->复合操作


线程安全性常见解决方法:

加锁机制(对变量或者方法进行限制,保证同一时间只有一个线程进行访问)

-->内置锁

-->重入


常见的锁机制

内置锁(synchronized(this),synchronized(class))

显示锁(Lock)

通常使用synchronized关键字时,所需的代码更少,并且用户出现错误的可能性也会降低,Lock对象可以实现更细粒度的控制,因此只有在解决特殊问题时,

才需要使用显示的Lock对象(例如,用synchronized关键字不能尝试获取锁且最终获取锁会失败,或者尝试着获取锁一段时间然后释放)


synchronized与Lock区别

synchronized在获取锁时,如果此时锁已经被其它线程持有,那么synchronized会阻塞

Lock在尝试获取锁时,若锁此时已经被其它线程持有,那么他可以在尝试失败后做其它事情


2.可见性问题("A线程对共享变量的修改对其它线程可见“)

可见性会导致失效数据(A线程对共享数据进行修改的同时B访问此共享数据,此时得到的结果可能是修改前的结果)


解决可见性常见方法:

同步机制

使用volatile变量(比sychronized关键字轻量的同步机制)


******sychronized和volatile区别:

锁机制可以解决原子性和可见性,但是volatile只能解决可见性


3.活跃性问题("某件正确的事情终将发生")

在多线程中由于线程之间存在依赖,例如A线程依赖B线程持有的资源,但是B线程一直不释放,导致A线程一直等待无法继续进行...

在多线程中引发活跃性问题主要原因包括:死锁、饥饿、活锁等。


4.性能问题

由活跃性导致了令一问题:性能问题


使用同步方法会带来一些性能问题,比如servlet中使用同步方法,则会导致请求只能串行处理,严重影响效率,

但是在不影响程序正确性的前提下,应该尽可能的使用同步代码块而不是同步整个方法,将耗时较长的代码块

移出同步,会大大增加程序执行效率。


5.ThreadLocal 

ThreadLocal通过“空间换时间“的方式,将共享变量封装到每一个线程的局部变量中,从而避免并发访问时安全性问题

但是此时保存在每个线程中的副本可能会存在状态不一致的情况,因此ThreadLocal不适合持有那种每个线程时刻都得

保持一样的数据。

ThreadLocal原理及其实现方式


6. java任务终结方式

6.1 执行完run()方法后任务终结;

一般都是在run方法中设置一个标志位,while(flag){}当需要终结任务时,可以通过外部设置flag值,使其退出run()方法

6.2 阻塞时终结任务;

一个任务可能因为多个原因进入阻塞状态:  

sleep休眠  

由sleep休眠引起的线程阻塞通过调用interrupt方法可以结束线程

io异常 

由于io引起的线程阻塞通过调用interrupt方法不可以结束线程,此时需要获取底层io异常原因并解决然后才能结束线程

同步锁不可用

由于synchronized同步代码块(同步方法)导致的线程阻塞通过调用interrupt方法不可以结束线程,但是由于reentrantLock互斥锁

引起的线程阻塞可以通过interrupt终结任


【完美复现】面向配电网韧性提升的移动储能预布局与动态调度策略【IEEE33节点】(Matlab代码实现)内容概要:本文介绍了基于IEEE33节点的配电网韧性提升方法,重点研究了移动储能系统的预布局与动态调度策略。通过Matlab代码实现,提出了一种结合预配置和动态调度的两阶段优化模型,旨在应对电网故障或极端事件时快速恢复供电能力。文中采用了多种智能优化算法(如PSO、MPSO、TACPSO、SOA、GA等)进行对比分析,验证所提策略的有效性和优越性。研究不仅关注移动储能单元的初始部署位置,还深入探讨其在故障发生后的动态路径规划与电力支援过程,从而全面提升配电网的韧性水平。; 适合人群:具备电力系统基础知识和Matlab编程能力的研究生、科研人员及从事智能电网、能源系统优化等相关领域的工程技术人员。; 使用场景及目标:①用于科研复现,特别是IEEE顶刊或SCI一区论文中关于配电网韧性、应急电源调度的研究;②支撑电力系统在灾害或故障条件下的恢复力优化设计,提升实际电网应对突发事件的能力;③为移动储能系统在智能配电网中的应用提供理论依据和技术支持。; 阅读建议:建议读者结合提供的Matlab代码逐模块分析,重点关注目标函数建模、约束条件设置以及智能算法的实现细节。同时推荐参考文中提及的MPS预配置与动态调度上下两部分,系统掌握完整的技术路线,并可通过替换不同算法或测试系统进一步拓展研究。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值