【Java-II】多线程详解 P18-19(Day16-20210715-Day4)

基于MATLAB的太阳能光伏电力仿真,模拟每日太阳能发电,可视化功率曲线,并通过数值积分计算总能量输出。.zip 1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 立即下载

线程同步

发生在多个线程操作同一个资源

线程同步机制

在这里插入图片描述在这里插入图片描述在这里插入图片描述

三大不安全案理

每个线程都有自己的工作内存

Case1:买票
package threadLearn.syn;

//不安全的买票
public class UnsafeBuyTicket{
    public static void main(String[] args) {
        BuyTicket buyTicket = new BuyTicket();

        new Thread(buyTicket,"苦逼的我").start();
        new Thread(buyTicket,"牛逼的你们").start();
        new Thread(buyTicket,"可恶的黄牛").start();
    }

}
class BuyTicket implements Runnable{
    //票
    private int ticketNums=10;
    boolean flag=true;//外部停止方式

    @Override
    public void run() {
        //买票
        while (flag){
            buy();
        }

    }

    private void buy(){
        //判断是否有票
        if (ticketNums<=0){
            flag=false;
            return;
        }
        //模拟延时 放大问题的发生性
        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //买票
        System.out.println(Thread.currentThread().getName()+"买到了"+ticketNums--);
    }
}

输出

牛逼的你们买到了10
可恶的黄牛买到了9
苦逼的我买到了10
苦逼的我买到了8
牛逼的你们买到了7
可恶的黄牛买到了6
可恶的黄牛买到了5
牛逼的你们买到了4
苦逼的我买到了3
可恶的黄牛买到了2
牛逼的你们买到了1
苦逼的我买到了0
可恶的黄牛买到了-1
Case2:不安全的取钱
package threadLearn.syn;

//不安全的取钱
//两个人去银行取钱,账户
public class UnsafeBank {
    public static void main(String[] args) {
        Account account = new Account(100,"结婚基金");
        Drawing you = new Drawing(account,50,"你");
        Drawing girlFriend = new Drawing(account,100,"女朋友");
        you.start();
        girlFriend.start();
    }
}

//账户
class Account{
    int money;//余额
    String name;//卡名字

    public Account(int money, String name) {
        this.money = money;
        this.name = name;
    }
}

//银行:模拟取款
class Drawing extends Thread{
    Account account;//账户
    int drawingMoney;//取了多少钱
    int nowMoney;//现在手里还有多少钱

    public Drawing(Account account, int drawingMoney, String name) {
        super(name);
        this.account = account;
        this.drawingMoney = drawingMoney;
    }

    @Override
    public void run() {
        //判断有没有钱
        if (account.money-drawingMoney<0){
            System.out.println(Thread.currentThread().getName()+" 钱不够了,取不了");
            return;
        }
        //放大问题的发生性
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        //卡内余额 = 余额 - 你取的钱
        account.money -= drawingMoney;

        //你手里的钱
        nowMoney += drawingMoney;

        //这里的this.getName()===Thread.currentThread().getName()
        System.out.println(account.name+" 余额为:" +account.money);
        System.out.println(this.getName()+" 手里的钱:"+nowMoney);
    }
}

Case3:线程不安全的集合
package threadLearn.syn;

import java.util.ArrayList;

public class UnsafeList {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        for (int i = 0; i < 10000; i++) {
            new Thread(()->{
                list.add(Thread.currentThread().getName());
            }).start();
        }
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(list.size());
    }
}

输出:

9997
//不同电脑,不同次数执行的结果不完全一样,不同线程往同一个数组同一个位置写入数据,导致数据丢失,产生不安全现象
【电力负荷预测】项目介绍 MATLAB实现基于BO-Transformer-LSTM贝叶斯优化算法(BO)优化Transformer-LSTM组合模型进行居民用户多步电力负荷预测(含模型描述及部分示例 内容概要:本文介绍了一个基于BO-Transformer-LSTM的组合模型,用于实现居民用户多步电力负荷预测的完整项目实例。该模型融合Transformer的全局注意力机制与LSTM的局部时序记忆能力,构建能够捕捉长时依赖与周期性特征的深度学习架构,并引入贝叶斯优化(BO)自动搜索最优超参数组合,提升预测精度与训练效率。项目涵盖从原始数据清洗、特征工程、滑动窗口样本构建、模型设计到超参数优化、反归一化及多步误差评估的全流程,强调时间顺序划分以防止信息泄露,并通过周期编码、外生变量融合等方式增强数据表达能力。文中提供了详细的MATLAB代码示例,包括数据预处理、网络搭建、贝叶斯优化配置和预测结果评估等关键步骤。 适合人群:具备一定机器学习和时间序列分析基础,熟悉MATLAB编程环境,从事电力系统预测、智能电网、负荷管理等相关领域的研究人员、工程师及研究生。 使用场景及目标:①应用于居民级或多用户聚合负荷的短期至中期多步预测(如未来24小时);②服务于配电系统运行调度、需求响应基线设定、家庭能源管理系统优化、分布式能源协调控制等实际工程场景;③为科研提供可复现的深度学习+贝叶斯优化的技术路线参考。 阅读建议:此资源以实际项目为导向,建议读者结合提供的代码逐步实现并调试模型,重点关注数据质量控制、时间特征编码、组合网络结构设计与贝叶斯优化稳定性之间的协同关系,在实践中深入理解多步预测中的误差累积机制与超参数敏感性问题。 立即下载

相关推荐

国央企创新负责人如何通过平台实现科研成果的快速识别与转化?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

【Java基础】【狂神说Java】Java零基础学习视频通俗易懂P60-76(OOP)(Day4、5-20210703、04)

同一个包下的类不需要导入就可以使用,不同包下的类,必须导入包才能使用。 static修饰静态方法,静态方法可以通过类名.方法名,进行调用,非静态方法通过这种方式进行调用会报错。 static修饰的内容是和类一起加载的,非静态方法是和对象一起生成的(类实例化之后才存在),所以static方法不能调用非静态方法。 Java是值传递 一个类里只能有一个public的类 package oop; public class Student { //静态方法 通过类名.方法名 调用 publ...

... 274

PotPlayer自用皮肤

自用 PotPlayer 皮肤,仅微调了字体大小与颜色,是按个人习惯调整,未做适配性调整。

【Java】使用idea进行Java后端开发 常用的快捷键

try…catch… 对于多行代码想要使用trycatch代码块将其包围起来,只需选中需要包围的代码块,按住组合键:ctrl+alt+t即可选择是try-catch还是try-catch-finally

... 264

2-shell及常用命令-续.pdf

2-shell及常用命令-续.pdf

使用 EasyExcel 实现 百万级数据导入导出

在项目开发中往往需要使用到数据的导入和导出,导入就是从Excel中导入到DB中,而导出就是从DB中查询数据然后使用POI写到Excel上。大数据的导入和导出,相信大家在日常的开发、面试中都会遇到。很多问题只要这一次解决了,总给复盘记录,后期遇到同样的问题就好解决了。好啦,废话不多说开始正文!1.如此大批量数据的导出和导入操作,会占用大量的内存实际开发中还应限制操作人数。2.在做大批量的数据导入时,可以使用jdbc手动开启事务,批量提交。

houxian1103的博客 2699

【Java】深入理解Java虚拟机P1-3(JVM性能调优+内存模型+虚拟机原理)

JDK JRE JVM的区别和联系 JDK:Java Development Kit,Java 开发工具包 JRE:Java Runtime Environment,Java 运行时环境 JVM:Java Virtual Machine, Java 虚拟机,它只认识 xxx.class 这种类型的文件,它能够将 class 文件中的字节码指令进行识别并调用操作系统向上的 API 完成动作。jvm 是 Java 能够跨平台的核心。 这三者的关系是:一层层的嵌套关系。JDK>JRE>JVM。 图片源

... 256

【数电课程设计】---出租车计价器

文章目录1、任务要求2、方案3、收获 1、任务要求 2、方案 3、收获

LZY 1万+

【Java基础】【狂神说Java】Java零基础学习视频通俗易懂P33-44(Day3-20210702)

p33 Java流程控制01:用户交互Scanner p34 Java流程控制02:Scanner进阶使用 p35 顺序结构 p36 if选择结构 p37 Switch选择结构 p38 While循环详解 p39 DoWhile循环 p40 For循环详解 1 Java流程控制01:用户交互Scanner 1.1 next() package base; import java.util.Scanner; public class Demo01 { public static void m.

... 252

crazyswarm无人机集群搭建笔记(一)资料索引

crazyswarm无人机搭建笔记:资料收集

Coco_range的博客 806

3dMax效率翻倍!用Octopus章鱼插件打造你的专属快捷菜单(附MaxScript入门指南)

本文详细介绍了如何利用Octopus插件和MaxScript脚本在3dMax中打造高效快捷菜单,显著提升三维建模与动画制作的工作效率。通过饼状菜单系统、自动化宏录制和脚本控制,用户可实现个性化工作流,节省大量操作时间。文章还提供了MaxScript入门指南,帮助开发者快速掌握这一强大工具。

weixin_30920853的博客 152

【Java基础】【狂神说Java】Java零基础学习视频通俗易懂P1-20(Day1)

JDK JRE JVM 命令行下编译运行java文件 Hello.java文件内容 public class Hello{ public static void main(String[] args){ System.out.print("Hello World!"); } } 准备好java文件之后就可以进行下面的操作了!! 打开cmd,进入Hello.java所在的文件路径,然后cmd下输入javac Hello.java,编译文件生成.class文件 javac Hello.java ..

... 249

ROS2前置基础教程 | 小鱼教你用CMake依赖查找流程

上面我们用g++、make、cmake三种方式来编译ros2的C++节点。用cmake虽然成功了,但是CMakeLists.txt的内容依然非常的臃肿,我们需要将其进一步的简化。将上面的CmakLists.txt改成下面的样子 接着继续生成和编译 是不是非常的神奇,为什么可以浓缩成那么短的几句指令呢?find_package查找路径对应的环境变量如下。 打开终端,输入指令: 结果 观察PATH变量,你会发现赫然在其中,中的路径如果以或结尾,则自动回退到上一级目录,接着检查这些目录下的 cmake找到这些目录

生活不止眼前的苟且 7159

【Java学习笔记】1-13重载

方法的重载 定义: **多个方法的名称一样,但是参数列表不一样。**方法名称区分大小写!!! 好处: 只需要记住唯一一个方法名称,就可以实现类似的多个功能。 方法重载与下列因素相关: 1、参数个数不同 2、参数类型不同 3、参数的多类型顺序不同 方法重载与下列因素无关: 1、与参数的名称无关 2、与方法的返回值类型无关 //错误示范,方法重载与方法的返回值无关 public static int sum(int a,int b){ return a+b } public static double sum

... 242

Cadence17.2 > Allegro > 检查PCB Layout信号线组等长

Cadence17.2 > Allegro > 检查PCB Layout等长和配线

DL_62532的专栏 1万+

基于simulink的能量管理策略的场景实例:混合动力电动汽车(HEV)的能量回收与分配策略

本文以混合动力电动汽车(HEV)为研究对象,通过Simulink建模详细演示了能量管理策略的设计与实现。内容涵盖HEV系统架构、核心组件工作原理,并分步骤指导搭建车辆动力学模型、动力系统组件模型和基于规则的能量管理策略。重点分析了制动能量回收与功率分配机制,通过仿真验证了逻辑门限策略在提升燃油经济性和维持电池SOC平衡方面的有效性。文章最后展望了更高级控制策略的应用前景,为HEV能量优化提供了完整的仿真研究框架。

xiaoheshang_123的博客 213

【Java基础】【狂神说Java】Java零基础学习视频通俗易懂P21-26(Day1昨天忘记发布了)

Java小技巧(idea下) psvm +tab键 补全 public static void main(String[] args) { } sout+enter键/鼠标点击选择 可以实现补全 System.out.println(); System.out.println(); /*+enter键生成多行注释符号 /* */ Java基本语法 1 注释、标识符、关键字 1.1 注释 1.1.1 单行注释(只能注释改行为文字) //这里写注释,只能注释改行为文字

... 237

【四足机器人项目实战】四足机器人腿部机械结构设计

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对四足机器人–腿部机械结构设计做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章 提示:以下是本篇文章正文内容 为了减轻腿部惯量,使用有限元分析着重进行轻量化设计,小腿采用工字梁方案,大腿采用内部镂方案,并使用1.5 mm的AL 6061硬质材料,轻量化的腿部设了腿部运动时摆动

qq_35635374的博客 7538

【Java基础】【狂神说Java】Java零基础学习视频通俗易懂P45-51(方法)(Day3-20210702)

1 方法 1.1 方法的基本知识 main方法是由java虚拟机调用的 1.2 方法的重载 1.3 命令行传参 package method; public class Demo03 { public static void main(String[] args) { for(int i=0;i<args.length;i++){ System.out.println(args[i]); } } } 打开cmd jav

... 227

基于SpringBoot+Vue的律师资讯与推荐系统源码设计,实现全方位法律服务与互动体验

该项目为基于SpringBoot和Vue构建的律师资讯与推荐系统源码,共计133个文件,涵盖87个Java源文件、16个XML配置文件、12个日志文件、11个图片文件、2个Markdown文件、2个YAML文件、1个Git忽略文件、1个授权文件及1个文本文件。系统功能全面,支持用户登录、注册、密码找回、首页浏览、律师搜索、法律咨询、问答互动、知识学习、在线咨询、律师评价、详情查看、个人中心等,同时为律师提供律师中心管理,包括首页、咨询管理、知识管理、个人中心等模块,旨在提供全方位法律服务与互动体验。

LabVIEW调用dll控制释放内存.rar

LabVIEW调用dll控制释放内存.rar

【Java基础】【狂神说Java】Java零基础学习视频通俗易懂P52-59(数组)(Day3-20210702)

1 数组

... 223

基于matlab/simulink的三相异步电机变频调速的矢量控制仿真模型

基于matlab/simulink的三相异步电机变频调速的矢量控制仿真模型

【Java基础】【狂神说Java】Java零基础学习视频通俗易懂P27-32(Day2-20210628)

P27 P27 基本运算符 P28 自增自减运算符

... 222

minimp3库深度解析[项目代码]

本文深入探讨了轻量级MP3解码库minimp3的核心特性与实现机制。minimp3专为资源受限环境设计,具有内存占用低、解码延迟小、API简洁且无外部依赖等优势,支持多种平台和MP3编码特性(如VBR/CBR、不同采样率与比特率)。文章从minimp3的极简设计哲学出发,详细解析了其技术原理,包括MP3解码背后的心理声学模型、子带滤波与MDCT变换、量化与霍夫曼编码等关键技术。同时,通过实际应用场景展示了如何将minimp3集成至嵌入式系统和移动设备的音频项目中,实现高性能、低功耗的MP3播放解决方案。minimp3以其不足10KB的代码体积和零动态内存分配的特性,成为嵌入式音频解码领域的轻量级王者。

【Java-II】多线程详解 P3(Day5-20210704-Day1)

程序:main线程 gc守护线程 (JVM创建的 用于垃圾回收) 02 线程创建 线程创建的三种方式 Thread class Runnable 接口 Callable 接口(工作之后用的多) Java虚拟机允许同时执行多个线程 线程创建方式1: 1、继承Thread类,重写run()方法,调用start()开启线程 线程启动需要时间,线程开启不一定立即执行,需要CPU调度执行 demo例子 package threadLearn.demo01; public class TestThread1 ex

... 203

【Java-II】网络编程实战讲解 P7-12(Day19-20210718-Day2)

1.7 TCP文件上传实现 package web; import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; public class testServerDemo02 { public static void main(String[] args) throws IOException { //1、创建服务 ServerSo

... 191

【Java基础】【狂神说Java】Java零基础学习视频通俗易懂P77-79(异常)(Day5-20210704)

package exception; public class Test { public static void main(String[] args) { int a=1; int b=0; try{//try监控区域 System.out.println(a/b); }catch (Exception e){//catch捕获异常 括号里是:想要捕获的异常类型 //可以多个catc...

... 174

【Java-II】多线程详解 P6-8(Day14-20210713-Day2)

06 初识并发问题——以购买火车票为例 package threadLearn.demo01; public class TestThread4 implements Runnable{ //票数 private int ticketNums=10; @Override public void run() { while (true){ if (ticketNums<=0){ break;

... 167
上一篇: 【Java-II】多线程详解 P14-17(Day16-20210715-Day4)
下一篇: 【Java-II】多线程详解 P20-21(Day17-20210716-Day5)
菜菜2022
博客等级 码龄9年 67粉丝 1033原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值