`

等待/通知之交叉备份实例

阅读更多
题目:创建20个线程,其中10个线程是将数据备份到A数据库中,另外10个线程将数据备份到B数据库中,并且备份A数据库和B数据库是交叉进行的。 
  首先创建出20个线程,效果如图3-41所示。 
  通过一些手段将这20个线程的运行效果变成有序的,如图3-42所示。 


public class DBTools {
    //确保备份数据库A首先执行
    private volatile boolean prevIsA = false;

    public synchronized void backupA() {
        try {
            while (prevIsA == true) {
                wait();
            }
            for (int i=0; i<5; i++) {
                System.out.println("+++++");
            }
            prevIsA = true;
            notifyAll();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public synchronized void backupB() {
        try {
            while (prevIsA == false) {
                wait();
            }
            for (int i=0; i<5; i++) {
                System.out.println("^^^^^");
            }
            prevIsA = false;
            notifyAll();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}


public class BackupA extends Thread {
    private DBTools dbTools;

    public BackupA(DBTools dbTools) {
        this.dbTools = dbTools;
    }
    public void run() {
        dbTools.backupA();
    }
}
public class BackupB extends Thread {
    private DBTools dbTools;

    public BackupB(DBTools dbTools) {
        this.dbTools = dbTools;
    }
    public void run() {
        dbTools.backupB();
    }
}

public class Run {
    public static void main(String[] args) throws InterruptedException {
       DBTools dbTools = new DBTools();
        for (int i=0; i<20; i++) {
            BackupB output = new BackupB(dbTools);
            output.start();
            BackupA input = new BackupA(dbTools);
            input.start();
        }
    }
}

+++++ 
+++++ 
+++++ 
+++++ 
+++++ 
^^^^^ 
^^^^^ 
^^^^^ 
^^^^^ 
^^^^^ 
+++++ 
+++++ 
+++++ 
+++++ 
+++++ 
^^^^^ 
^^^^^ 
^^^^^ 
^^^^^ 
^^^^^ 
…… 
打印的效果是交替运行的。 
  交替打印的原理就是使用如下代码作为标记: 
  private boolean volatile prevIsA = false; 
  实现了A和B线程交替备份的效果
分享到:
评论

相关推荐

    oracle冷备份实例forwindows

    Oracle 冷备份实例 for Windows oracle 冷备份是指在 Windows 平台上对 Oracle 数据库实例进行备份的操作。冷备份需要将企业的 Oracle 数据库实例shutdown下来,并将所有的数据文件、控制文件、参数文件等拷贝回来...

    mysql 备份脚本实例

    mysql 备份脚本实例,本人亲测,可以正常使用,需要根据真实路径修改相关配置

    Python实现备份文件实例

    本文实例讲述了Python实现备份文件的方法,是一个非常实用的技巧。分享给大家供大家参考。具体方法如下: 该实例主要实现读取一个任务文件, 根据指定的任务参数自动备份. 任务文件的格式: (注意,分号后面注释是不...

    rman备份恢复实例

    根据提供的文件内容,本文将详细解释RMAN(Recovery Manager)在Oracle数据库中的备份与恢复操作,特别是关于归档模式的设置以及RMAN的各种命令应用。 ### 一、归档模式设置 #### 1. 设置数据库为归档模式 为了...

    文件夹全自动备份实例源码

    标题中的“文件夹全自动备份实例源码”是一个关于利用编程实现文件夹自动化备份的项目,主要涉及的是VB(Visual Basic)编程语言。这个实例提供了一种解决方案,使得用户可以设置好备份策略后,无需手动操作,系统会...

    LIS通信相关HL7协议/ASTM协议介绍及实例

    LIS通信相关,HL7协议/ASTM协议介绍及实例,内含若干厂家的说明文档

    Linux环境下rman备份的实例脚本

    "Linux环境下RMAN备份实例脚本" 本文档介绍了在Linux环境下使用RMAN进行数据库备份的实例脚本。RMAN(Recovery Manager)是Oracle数据库中的一个备份和恢复工具,用于管理和维护数据库的备份和恢复。 背景 _target...

    C#通信TCP/IP server client 简单实例

    - 在循环中等待客户端连接,使用`AcceptTcpClient()`方法阻塞直到有客户端连接。 - 当客户端连接时,创建一个新的网络流(NetworkStream)对象,与客户端进行数据交换。 - 收发数据,使用`Read()`和`Write()`方法...

    C#自动备份SqlServer 数据库源码,带配置功能强大 c#数据库备份源码

    - **邮件通知**:备份完成后发送通知邮件,告知用户备份状态。 在提供的压缩包文件“c#自动备份源码”中,应该包含了实现上述功能的C#代码示例。分析和理解这些源码,可以帮助你构建自己的数据库备份系统,确保数据...

    oracle数据库备份与还原实例

    Oracle 数据库备份与还原实例 Oracle 数据库备份与还原是数据库管理的重要步骤,涉及到数据的安全性和可靠性。本文将介绍 Oracle 数据库备份与还原实例,使用 exp 与 imp 方式导出和导入数据,同时也包含 Linux ...

    C/C++软件项目开发实例(标准文档+代码+ )

    在本资源中,我们关注的是一个C/C++软件项目的开发实例,特别是一个完整的"Internet图片验证码系统"。这个实例提供了一整套的标准文档、源代码以及其他相关材料,旨在帮助学习者理解和实践C/C++编程中的模块化编程...

    rman备份操作实例

    介绍oracle热备基础知识,包含备份检查,增量备份,各数据库文件备份方法等。

    C/C++串口通信典型应用实例编程实践.(电子工业.曹卫杉)

    书名:《C/C++串口通信典型应用实例编程实践》(电子工业出版社.曹卫杉) PDF扫描版,全书共分10章,共316页。 内容介绍 本书从工程应用的角度出发,对目前流行的三种不同类型的C/C++语言(包括C++ Builder、Visual ...

    STM32实例程序 8.BKP_test_备份寄存器使用

    STM32实例程序 8.BKP_test_备份寄存器使用STM32实例程序 8.BKP_test_备份寄存器使用STM32实例程序 8.BKP_test_备份寄存器使用STM32实例程序 8.BKP_test_备份寄存器使用STM32实例程序 8.BKP_test_备份寄存器使用STM32...

    asp.net 数据库备份源代码(实例)

    这个实例源代码提供了一种方法,帮助开发者实现数据库的自动或手动备份。以下是基于标题和描述所涉及的关键知识点的详细解释: 1. **ASP.NET**: ASP.NET是Microsoft开发的一个用于构建Web应用程序的框架,它提供了...

    文件自动备份工具

    文件自动备份工具。 联系人:萧谷子 邮箱: great.xiao@gmail.com 备份指令:  default 根据配置文件指令的路径执行备份。  copy /sPath:PathName /tPath:PathName /bName:BackupName  [/sUser:UserName] [/sPswd:...

    Oracle数据库逻辑增量备份之exp/imp

    6六、增量备份恢复实例 通过不同时间点的全备、增量备份和累积备份,可以实现对数据库的精确恢复。例如: - A时间点全备:作为基础备份。 - B时间点增量备份:仅包含自A时间点以来的变化。 - C时间点累积备份:包含A...

    实用数据库备份策略与实例

    因此,数据备份成为了保障数据安全的重要手段之一。 #### 二、数据库备份的重要性 ##### 2.1 保护数据的意义 数据的价值不容小觑,特别是在商业领域,许多关键决策都需要依赖准确的数据来进行。一旦这些数据丢失...

    mysql备份恢复代码实例.zip

    "mysql备份恢复代码实例.zip" 提供了一组实际的代码示例,帮助我们理解并实施MySQL的备份与恢复操作。在这个压缩包中,你将找到关于如何在MySQL环境中执行这些操作的具体步骤。 首先,MySQL的备份通常分为全量备份...

    Windows下MySql自动备份脚本(有备份日志,且可以删除历史备份)

    该脚本支持日志功能,在备份成功或是失败都会讲日志信息写入到数据备份目录下的MySQLBackLog.txt文件中,如果在备份过程中存在错误,没有备份成功的数据库会写入到具体的备份目录下的__error.txt文件中,以方便手动...

Global site tag (gtag.js) - Google Analytics