您现在的位置是:首页 > 正文

【PTA】5-7 使用同步机制协调线程的执行顺序

2024-02-01 05:14:06阅读 3

5-7 使用同步机制协调线程的执行顺序(分数 6)

下面程序采用多个线程对整数执行先加后乘的计算,利用 Java 的同步机制,可以保证线程执行顺序的正确性。

class MagicMoney implements Runnable{
    private int money;//线程共享变量
    private boolean ready=false;//累加线程结束标志
    MagicMoney(int money){ this.money=money; }
    //线程体
    synchronized public void run() {//同步方法用 synchronized 修饰
        switch (Thread.currentThread().getName()) { //按名字区分不同线程
        case "累加":
            money+=100;
            ready=true;    //设置累加线程结束标志
            
            // 此处填写代码(2分);
            
            break;
        case "翻倍":
            
            // 此处填写代码(2分)
            {
                try { 
                
                    // 此处填写代码(2分); //@@
                    
                } catch (InterruptedException e) {         }
            }
            money*=2;
            break;
        }
        System.out.println("你手上有"+money+"$");
    }
}
public class Main {
    public static void main(String[] args) {
        MagicMoney m=new MagicMoney(50);//创建接口实现类对象
        Thread s1=new Thread(m,"累加");//创建线程对象
        Thread s2=new Thread(m,"翻倍");
        s2.start();//启动线程
        s1.start();
    }
}
class MagicMoney implements Runnable{
    private int money;//线程共享变量
    private boolean ready=false;//累加线程结束标志
    MagicMoney(int money){ this.money=money; }
    //线程体
    synchronized public void run() {//同步方法用 synchronized 修饰
        switch (Thread.currentThread().getName()) { //按名字区分不同线程
        case "累加":
            money+=100;
            ready=true;    //设置累加线程结束标志
            notify();   // 唤醒线程
            break;
        case "翻倍":
            if(!ready)   // 若不满足ready=true条件则让出线程
            {
                try {
                	wait(); //@@使线程等待
                } catch (InterruptedException e) {         }
            }
            money*=2;
            break;
        }
        System.out.println("你手上有"+money+"$");
    }
}
public class Main {
    public static void main(String[] args) {
        MagicMoney m=new MagicMoney(50);//创建接口实现类对象
        Thread s1=new Thread(m,"累加");//创建线程对象
        Thread s2=new Thread(m,"翻倍");
        s2.start();//启动线程
        s1.start();
    }
}

网站文章

  • ftp作业

    ftp作业

     a) 域的图:b) 你的用户的目录访问权限:c) 你用浏览器或其他软件访问FTP后的结果:

    2024-02-01 05:13:59
  • Linux 常用命令汇总(详细版)

    Linux 常用命令汇总(详细版)

    Linux 的文件系统是采用层级式的树状目录结构,在此结构中的最上层是根目录“/”,然后再次目录下再创建其他的目录。目录结构:以下是对这些目录的解释:less:可以按键盘上下方向键显示上下内容more...

    2024-02-01 05:13:30
  • mac工具

    mac工具

    iStat Menus 6激活密码Email: 982092332@qq.comSN: GAWAE-FCWQ3-P8NYB-C7GF7-NEDRT-Q5DTB-MFZG6-6NEQC-CRMUD-8MZ2K-66SRB-SU8EW-EDLZ9-TGH3S-8SGA参考文章:1、https://www.jianshu.com/p/1345a10331cb

    2024-02-01 05:13:23
  • AFE4400的使用

    AFE4400的使用

    随着人们越来越重视医疗健康,相对应的产品也随之推出。TI就很好的走在前面,对于生理信号采集方面不仅推出了ADS124x系列和ADS129x系列,也推出了集成了光传感器AFE系列。AFE4400 是一款非常适合于脉冲血氧仪应用的完全集成模拟前端 (AFE)。 此器件包含一个具有集成模数转换器 (ADC) 的低噪声接收器通道、一个 LED 发射部件和针对传感器以及 LED 故障检测的诊断功能。

    2024-02-01 05:13:17
  • 学习计划表(长期)

    一:课程学习 数学:1. 高等数学 2. 线性代数 英语:1. 英语四级 2. 英语六级 政治:1. 思修 2. 毛概 3. 近代史 4.马原 5. 时事 专业:1. 信息技术(计算机基础) 2. 自...

    2024-02-01 05:12:48
  • 深度学习deep learning

    深度学习deep learning

    一、简介 深度学习是包含多个隐层的机器学习模型,核心是基于训练的方式,从海量数据中挖掘有用信息,实现分类与预测。 早期的深度学习模型:编码器、循环神经网络、深度置信网络、卷积神经网络 衍生模型:堆叠降...

    2024-02-01 05:12:41
  • mui中的页面传值方法

    1.通过url传值: 父页面: mui.openWindow({ url: xxx.html?date='+str, }); var thisURL = document.URL;//获取页面...

    2024-02-01 05:12:33
  • com.aspose.cad.cadexceptions.ImageSaveException: Image export failed. 解决方案

    com.aspose.cad.cadexceptions.ImageSaveException: Image export failed. 解决方案

    项目使用aspose-cad做dwg转svg/png,本地调试正常,部署到linux换进报错com.aspose.cad.cadexceptions.ImageSaveException: Image export failed.

    2024-02-01 05:12:00
  • QSqlTableModel使用简介

    QSqlTableModel使用简介

    【代码】QSqlTableModel使用简介。

    2024-02-01 05:11:53
  • html5 梵高 星,复华文旅:穿越吧!梵高

    创意定位复华耀世SPIRIT为宣传自身优势和高端定位推出的H5作品,作品以梵高的描述为主线,讲述了梵高在世界各地的惨痛遭遇后在澳大利亚黄金海岸找到幸福人生的故事,以此引起人们对复华耀世的关注和了解。策...

    2024-02-01 05:11:46