多线程小记1

Java多线程核心技术
本文详细介绍了Java中synchronized关键字的使用方法,包括synchronized方法和synchronized块的区别及应用场景;探讨了多线程的启动机制,即Start和Run方法的工作原理;分析了线程间的阻塞机制,如wait&notify、sleep、suspend&resume和yield方法的作用;最后对比了Thread类和Runnable接口创建线程的不同之处。

1. synchronized 方法和 synchronized 块

synchronized 方法
1)  所声明为 synchronized 的成员函数中至多只有一个处于可执行状态
2) 一个大的方法声明为synchronized 将会大大影响效率,比如run()

synchronized 块(推荐)

synchronized(syncObject) {  
//允许访问控制的代码  
}  
1) thread1访问object的一个synchronized(this)同步代码块时,它就获得了object.lock
2) thread2堵塞任何synchronized(this)的同步代码块
3) thread2正常运行于非synchronized(this)非同步代码块。
---------------------------------
遗留:
1) 如果instance变量是一个对象,如数组或ArrayList什么的,那上述方法仍然不安全,因为当外界对象通过get方法拿到这个instance对象的引用后,又将其指向另一个对象,那么这个private变量也就变了,岂不是很危险。 这个时候就需要将get方法也加上synchronized同步,并且,只返回这个private对象的clone()――这样,调用端得到的就是对象副本的引用了。
---------------------------------
2. 多线程的Start和Run方法
1)  thread1 = new Thread();仅仅是创建了Thread,从scr中可以看出调用init方法。
2)  thread1.start()是调用启动,执行run方法,如果不重写run方法,则run()默认为空。
3)  每个线程都将启动,每个线程都将运行直到完成。一系列线程以某种顺序启动并不意味着将按该顺序执行。对于任何一组启动的线程来说,调度程序不能保证其执行次序,持续时间也无法保证。

--------------------------------
3. 阻塞:
1) wait & notify方法
1. 当在对象上调用wait()方法时,执行该代码的线程立即放弃它在对象上的锁。然而调用notify()或notifyAll()时,并不意味着这时线程会放弃其锁。如果线程仍然在完成同步代码,则线程在移出之前不会放弃锁。因此,只要调用notify()并不意味着这时该锁变得可用。
2. 当线程调用stop方法,即可使线程进入消亡状态,但是由于stop方法已被废弃不建议使用。
2) sleep() 方法:
sleep() 允许 指定以毫秒为单位的一段时间作为参数,时间一过,线程重新由阻塞状态进入可执行状态。
3) suspend() 和 resume() 方法:两个方法配套使用,典型地,suspend() 和 resume() 被用在等待另一个线程产生的结果的情形:测试发现结果还没有产生后,让线程阻塞,另一个线程产生了结果后,调用 resume() 使其恢复。
4) yield() 方法:yield() 使得线程放弃当前分得的 CPU 时间,但是不使线程阻塞,即线程仍处于可执行状态,随时可能再次分得 CPU 时间。调用 yield() 的效果等价于调度程序认为该线程已执行了足够的时间从而转到另一个线程。
------------------------------

4. Thread & Runnable创建线程

Runnable是接口,需要实现Run方法。现实中多用Runnable接口方法。

Thread是类继承,但Java是单继承,如果一个类已经继承了其他类,则无法再继承thread,一般通过实现runnable接口。

两种方法示例
Thread Test = new Thread();
Test.start();
在使用Runnable的时候需要先new一个实现Runnable的实例,之后启动Thread即可。
Test impelements Runnable;
Test t = new Test();
Thread test = new Thread(t);
test.start();
内容概要:本文提出了一种基于融合鱼鹰算法和柯西变异的改进麻雀优化算法(OCSSA),用于优化变分模态分解(VMD)的参数,进而结合卷积神经网络(CNN)与双向长短期记忆网络(BiLSTM)构建OCSSA-VMD-CNN-BILSTM模型,实现对轴承故障的高【轴承故障诊断】基于融合鱼鹰和柯西变异的麻雀优化算法OCSSA-VMD-CNN-BILSTM轴承诊断研究【西储大学数据】(Matlab代码实现)精度诊断。研究采用西储大学公开的轴承故障数据集进行实验验证,通过优化VMD的模态数和惩罚因子,有效提升了信号分解的准确性与稳定性,随后利用CNN提取故障特征,BiLSTM捕捉时间序列的深层依赖关系,最终实现故障类型的智能识别。该方法在提升故障诊断精度与鲁棒性方面表现出优越性能。; 适合人群:具备一定信号处理、机器学习基础,从事机械故障诊断、智能运维、工业大数据分析等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①解决传统VMD参数依赖人工经验选取的问题,实现参数自适应优化;②提升复杂工况下滚动轴承早期故障的识别准确率;③为智能制造与预测性维护提供可靠的技术支持。; 阅读建议:建议读者结合Matlab代码实现过程,深入理解OCSSA优化机制、VMD信号分解流程以及CNN-BiLSTM网络架构的设计逻辑,重点关注参数优化与故障分类的联动关系,并可通过更换数据集进一步验证模型泛化能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值