怎样深入理解JAVA中的多线程问题??? (急救)

球索科技 2006-05-07 04:39:00
看JAVA方面的书时遇到这样一个JAVA程序:
package login;

class waitNOtifyDemo {
public static void main(String[ ] args){
MessageBoard m=new MessageBoard( ); //构造共享的信息板对象
Reader readfrom_m=new Reader(m);
Writer writeto_m=new Writer(m);
readfrom_m.start( );
writeto_m.start( );
}
}

class MessageBoard{
private String message;
private boolean ready=false;
public synchronized String read( ){
while(ready==false){
try { wait( );}
catch (InterruptedException e){ }
}
ready=false;
notify( );
return message;
}
public synchronized void write(String s){
while(ready==true){
try { wait( );} catch (InterruptedException e){ } }
message=s; ready=true; notify( );
}
}

class Reader extends Thread {
private MessageBoard mBoard;
public Reader(MessageBoard m){
mBoard=m;
}
public void run(){
String s="";
boolean reading=true;
while(reading){
s=mBoard.read();
System.out.println("Reader read:"+s);
if(s.equals("logoff")) reading=false;}
System.out.println("Finished :10 seconds...");
try{ sleep(1000);}
catch(InterruptedException e){}
}
}

class Writer extends Thread{
private MessageBoard mBoard;
private String messages[]={
"星期一 :---------------------------",
"星期二 :---------------------------",
"星期三 :---------------------------",
"星期四 :---------------------------",
"星期五 :---------------------------",
"星期六 :---------------------------",
"星期日 :---------------------------"
};
public Writer (MessageBoard m){
mBoard=m;
}
public void run(){
for(int i=0;i<messages.length;i++){
mBoard.write(messages[i]);
System.out.println("Writer wrote:"+messages[i]);
try{sleep((int)(Math.random()*100));}
catch(InterruptedException e){}
}
mBoard.write("logoff");
}
}
这样一个多线程程序,
但是根据我对此程序的理解与运行结果不一样:
本人理解如下:
(1) 在类waitNOtifyDemo中启动两个线程readfrom_m.start( ); writeto_m.start( );
(2) 首先启动readfrom_m.start( );线程,调用类 MessageBoard中的 read( )函数而进入wait( ),而使线程进入阻塞.
(3) 然后writeto_m.start( )启动,调用类 MessageBoard中的 write(String s)函数, 虽然有 notify( )唤醒wait( ), 即readfrom_m.start( )从阻塞中被唤醒,但也只是从阻塞变成就绪,writeto_m.start( )仍然占用CPU,
(4) writeto_m继续执行,会输出
Writer wrote:星期一 :---------------------------
(5) 在循环中,writeto_m进入wait( ),而readfrom_m从就丛就绪进入CPU进而占用CPU,因此输出
Reader read:星期一 :---------------------------
(6) 依次类推,本人的输出结果为
Writer wrote:星期一 :---------------------------

Reader read:星期一 :---------------------------

Writer wrote:星期二 :---------------------------

Reader read:星期二 :---------------------------

Reader read:星期三 :---------------------------

Writer wrote:星期三 :---------------------------

Writer wrote:星期四 :---------------------------

Reader read:星期四 :---------------------------

Writer wrote:星期五 :---------------------------

Reader read:星期五 :---------------------------

Writer wrote:星期六 :---------------------------

Reader read:星期六 :---------------------------

Writer wrote:星期日 :---------------------------

Reader read:星期日 :---------------------------

Reader read:logoff

Finished :10 seconds...



但是,运行结果为:
Reader read:星期一 :---------------------------

Writer wrote:星期一 :---------------------------

Reader read:星期二 :---------------------------

Writer wrote:星期二 :---------------------------

Writer wrote:星期三 :---------------------------

Reader read:星期三 :---------------------------

Reader read:星期四 :---------------------------

Writer wrote:星期四 :---------------------------

Reader read:星期五 :---------------------------

Writer wrote:星期五 :---------------------------

Writer wrote:星期六 :---------------------------

Reader read:星期六 :---------------------------

Writer wrote:星期日 :---------------------------

Reader read:星期日 :---------------------------

Reader read:logoff

Finished :10 seconds...

不知道我的错误理解在什么地方??
请高手指点,
注: 清高手指点我应该注意的地方, 并且请多讲一下在多线程中要注意的问题,
多深入讲一下关于多线程的问题!!!!!!!
不胜感激 不胜感激
不胜感激 不胜感激
不胜感激 不胜感激
不胜感激 不胜感激
不胜感激 不胜感激
不胜感激 不胜感激
不胜感激 不胜感激


另外,请高手指点完以后请留下电子邮件,以防本人遇到其他问题时可以及时请教,本人将不胜感激
本人电子邮件:en_456190@sina.com>
...全文
201 1 打赏 收藏 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
liujiwe79 2006-05-08
  • 打赏
  • 举报
回复
太长了,看得不是太明白
内容概要:本文介绍了一个基于Python的WGAN-LSTM混合模型,用于解决复杂时间序列预测问题。该模型结合瓦瑟斯坦生成对抗网络(WGAN)与长短期记忆网络(LSTM),利用LSTM捕捉时间序列中的长期依赖和动态趋势,通过WGAN的生成器与评价器对抗训练,使预测结果不仅贴近真实值,还能更好地保留数据分布特征,如波动性、尖峰和异常变化。项目采用PyTorch实现,涵盖数据预处理、滑动窗口构建、标准化、条件生成器与评价器设计、梯度惩罚机制、联合损失优化及模型评估全流程,并支持多变量输入与不确定性建模,适用于非线性、非平稳、高波动场景的单步预测。; 适合人群:具备Python编程基础和深度学习背景,熟悉PyTorch框架,从事时间序列分析、AI建模或数据科学相关工作的研究人员、工程师及高校学生(建议有1年以上相关经验); 使用场景及目标:①应用于金融价格、电力负荷、设备传感、市场需求等高波动时间序列的精准预测;②实现对未来不确定性的量化表达,支持风险评估、区间预测与情景模拟;③提升传统回归模型对异常波动的识别能力,优化预警与决策系统; 阅读建议:本文提供完整代码结构与核心实现片段,建议结合完整项目代码、数据集和博客文档进行复现与调试,重点关注对抗训练稳定性、梯度惩罚实现及多损失权重平衡策略,以深入掌握WGAN-LSTM在时序建模中的工程应用细节。
代码下载链接: https://pan.quark.cn/s/a4b39357ea24 I2C(Inter-Integrated Circuit)总线是一种在电子设备中广泛应用的串行通信协议,该协议由Philips半导体(现名为NXP半导体)于上世纪80年代提出。I2C总线借助两条线路(时钟线SCL和数据线SDA)完成设备间的控制指令与数据信息的交换,因此它具备多主机与多从机的串行总线特性。在软件层面模拟I2C主从机交互时,常规的IO端口被用于再现I2C主机及从机的通信过程。 I2C总线引脚功能说明: 1. SCL(Serial Clock):时钟线,其时钟信号由主机掌控。 2. SDA(Serial Data):数据线,主要用于承载数据传输。 总线时序规范: - 非活动状态:当总线处于非通信阶段,SDA线保持高电平。 - 总线的线与操作:若多个设备同时接入总线,通过线与逻辑确保任一设备输出低电平,则总线整体呈现低电平状态。 - 数据位稳定性要求:数据位必须在SCL为高电平期间维持稳定状态,而只有在SCL为低电平期间方可发生改变。 - 起始与终止信号的定义:起始信号表现为在SCL高电平期间SDA从高电平转为低电平,终止信号则是在SCL高电平期间SDA从低电平转为高电平。起始信号标志着总线使用周期的起始,终止信号则表示总线使用周期的结束。 - 从机数据处理延时的处理机制:当从机需要额外时间处理数据时,能够将SCL线拉至低电平,促使主机进入等待状态。 - 字节传输与应答机制:一个字节由8位数据加上1位应答位构成。若从机无法应答或已无数据接收需求,将释放SDA线,主机随后产生终止信号。 - 数据帧结构:数据帧以从机地址作为起始,接着是数据传输方向指示位,最后是实际传输...
内容概要:本文研究了基于多智能体一致性演化的孤岛微电网自适应虚拟阻抗容错控制与二次稳态补偿机制,旨在解决孤岛微电网在脱离主网支撑后面临的电压与频率稳定性差、功率分配不均及抗干扰能力弱等关键问题。研究通过构建多智能体系统模型,利用一致性算法实现各分布式电源(DG)间的分布式协同控制,摆脱对中心控制器的依赖,提升系统的自治性与可扩展性。针对线路阻抗差异导致的传统下垂控制功率分配偏差问题,提出自适应虚拟阻抗控制策略,能够在线动态调节虚拟阻抗参数,有效补偿线路压降,实现有功与无功功率的精确按比例分配。为应对通信链路中断或部分DG故障等异常工况,设计了容错控制机制,确保系统在部分节点失效时仍能维持基本运行。同时,引入二次稳态补偿控制,通过多智能体协商消除一次下垂控制产生的静态电压和频率偏差,使系统运行点恢复至额定值。整个控制策略在Simulink环境中进行了详细建模与仿真实现,通过设置负载突变、通信中断、DG投切等多种复杂工况,全面验证了所提方法在提升功率分配精度、改善电能质量、增强系统鲁棒性与容错能力方面的有效性与优越性。; 适合人群:具备电力系统、自动化、电气工程及其自动化等相关专业背景,从事微电网、分布式能源系统、智能电网控制与优化等领域研究的硕士/博士研究生、高校科研人员以及电力行业的工程技术人员。; 使用场景及目标:①应用于孤岛微电网的分布式协同控制策略研究与工程设计,特别是在偏远地区、海岛或应急供电等无法依赖主网的场景;②解决传统集中式控制可靠性低、可扩展性差的问题,以及传统下垂控制因线路参数差异导致的功率分配不准、电压频率偏移过大等核心难题;③提升微电网在面对内部故障和外部扰动时的自治运行能力、系统整体可靠性与容错能力,为构建高韧性、智能化的新型电力系统提供技术支持。; 阅读建议:读者应结合提供的Simulink仿真模型,深入理解多智能体一致性算法的实现逻辑与通信拓扑构建方法,重点关注自适应虚拟阻抗的调节律设计、容错控制的触发与切换逻辑,以及二次补偿控制的迭代收敛过程。建议通过修改仿真参数、设置不同的故障场景进行对比实验,亲身体验各控制模块的作用效果,并分析仿真结果中的功率波形、电压频率曲线及偏差收敛情况,以全面掌握该先进控制策略的设计精髓与性能优势。

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧