题目:创建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 冷备份实例 for Windows oracle 冷备份是指在 Windows 平台上对 Oracle 数据库实例进行备份的操作。冷备份需要将企业的 Oracle 数据库实例shutdown下来,并将所有的数据文件、控制文件、参数文件等拷贝回来...
mysql 备份脚本实例,本人亲测,可以正常使用,需要根据真实路径修改相关配置
本文实例讲述了Python实现备份文件的方法,是一个非常实用的技巧。分享给大家供大家参考。具体方法如下: 该实例主要实现读取一个任务文件, 根据指定的任务参数自动备份. 任务文件的格式: (注意,分号后面注释是不...
根据提供的文件内容,本文将详细解释RMAN(Recovery Manager)在Oracle数据库中的备份与恢复操作,特别是关于归档模式的设置以及RMAN的各种命令应用。 ### 一、归档模式设置 #### 1. 设置数据库为归档模式 为了...
标题中的“文件夹全自动备份实例源码”是一个关于利用编程实现文件夹自动化备份的项目,主要涉及的是VB(Visual Basic)编程语言。这个实例提供了一种解决方案,使得用户可以设置好备份策略后,无需手动操作,系统会...
LIS通信相关,HL7协议/ASTM协议介绍及实例,内含若干厂家的说明文档
"Linux环境下RMAN备份实例脚本" 本文档介绍了在Linux环境下使用RMAN进行数据库备份的实例脚本。RMAN(Recovery Manager)是Oracle数据库中的一个备份和恢复工具,用于管理和维护数据库的备份和恢复。 背景 _target...
- 在循环中等待客户端连接,使用`AcceptTcpClient()`方法阻塞直到有客户端连接。 - 当客户端连接时,创建一个新的网络流(NetworkStream)对象,与客户端进行数据交换。 - 收发数据,使用`Read()`和`Write()`方法...
- **邮件通知**:备份完成后发送通知邮件,告知用户备份状态。 在提供的压缩包文件“c#自动备份源码”中,应该包含了实现上述功能的C#代码示例。分析和理解这些源码,可以帮助你构建自己的数据库备份系统,确保数据...
Oracle 数据库备份与还原实例 Oracle 数据库备份与还原是数据库管理的重要步骤,涉及到数据的安全性和可靠性。本文将介绍 Oracle 数据库备份与还原实例,使用 exp 与 imp 方式导出和导入数据,同时也包含 Linux ...
在本资源中,我们关注的是一个C/C++软件项目的开发实例,特别是一个完整的"Internet图片验证码系统"。这个实例提供了一整套的标准文档、源代码以及其他相关材料,旨在帮助学习者理解和实践C/C++编程中的模块化编程...
介绍oracle热备基础知识,包含备份检查,增量备份,各数据库文件备份方法等。
书名:《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...
这个实例源代码提供了一种方法,帮助开发者实现数据库的自动或手动备份。以下是基于标题和描述所涉及的关键知识点的详细解释: 1. **ASP.NET**: ASP.NET是Microsoft开发的一个用于构建Web应用程序的框架,它提供了...
文件自动备份工具。 联系人:萧谷子 邮箱: great.xiao@gmail.com 备份指令: default 根据配置文件指令的路径执行备份。 copy /sPath:PathName /tPath:PathName /bName:BackupName [/sUser:UserName] [/sPswd:...
6六、增量备份恢复实例 通过不同时间点的全备、增量备份和累积备份,可以实现对数据库的精确恢复。例如: - A时间点全备:作为基础备份。 - B时间点增量备份:仅包含自A时间点以来的变化。 - C时间点累积备份:包含A...
因此,数据备份成为了保障数据安全的重要手段之一。 #### 二、数据库备份的重要性 ##### 2.1 保护数据的意义 数据的价值不容小觑,特别是在商业领域,许多关键决策都需要依赖准确的数据来进行。一旦这些数据丢失...
"mysql备份恢复代码实例.zip" 提供了一组实际的代码示例,帮助我们理解并实施MySQL的备份与恢复操作。在这个压缩包中,你将找到关于如何在MySQL环境中执行这些操作的具体步骤。 首先,MySQL的备份通常分为全量备份...
该脚本支持日志功能,在备份成功或是失败都会讲日志信息写入到数据备份目录下的MySQLBackLog.txt文件中,如果在备份过程中存在错误,没有备份成功的数据库会写入到具体的备份目录下的__error.txt文件中,以方便手动...