题目:创建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线程交替备份的效果
分享到:
相关推荐
基于Quartus II的FPGA/CPLD数字系统设计实例 中图法分类号: TP332.1/684 周润景, 图雅, 张丽敏编著 电子工业出版社 第1章 Altera Quartus II开发流程 1.1 Quartus II软件综述 1.2 设计输入 1.3 约束输入 1.4 ...
C#2005实例数据库附加/还原/备份/分离/删除等操作,方便数据库的管理,在不需要登录SQL管理器,就能操作。直观。同时可以换皮肤设置等。
标签"LabWindows/CVI逐步深入与开发实例 光盘"进一步强调了学习路径的系统性和实践性,光盘中的内容可能被划分为不同阶段,每个阶段都包含相关实例,用户可以通过这些实例进行自我测试和技能提升。 在压缩包子文件...
mysql 备份脚本实例,本人亲测,可以正常使用,需要根据真实路径修改相关配置
本文实例讲述了Python实现备份文件的方法,是一个非常实用的技巧。分享给大家供大家参考。具体方法如下: 该实例主要实现读取一个任务文件, 根据指定的任务参数自动备份. 任务文件的格式: (注意,分号后面注释是不...
金蝶云(K3/cloud)WebAPI开发实例是针对企业级财务管理软件金蝶云的API接口进行编程实践的示例项目。金蝶云,原名K3,是金蝶国际软件集团推出的一款云端ERP解决方案,它为企业提供了全面的财务、供应链、生产制造等...
根据提供的文件内容,本文将详细解释RMAN(Recovery Manager)在Oracle数据库中的备份与恢复操作,特别是关于归档模式的设置以及RMAN的各种命令应用。 ### 一、归档模式设置 #### 1. 设置数据库为归档模式 为了...
Oracle 备份和恢复实例 Oracle 备份和恢复实例是 Oracle 数据库管理系统中非常重要的一部分,它们都是为了保证数据库的可靠性和完整性。数据库恢复可以分为两类:实例故障的一致性恢复和介质故障或文件错误的不...
LIS通信相关,HL7协议/ASTM协议介绍及实例,内含若干厂家的说明文档
"Linux环境下RMAN备份实例脚本" 本文档介绍了在Linux环境下使用RMAN进行数据库备份的实例脚本。RMAN(Recovery Manager)是Oracle数据库中的一个备份和恢复工具,用于管理和维护数据库的备份和恢复。 背景 _target...
- 在循环中等待客户端连接,使用`AcceptTcpClient()`方法阻塞直到有客户端连接。 - 当客户端连接时,创建一个新的网络流(NetworkStream)对象,与客户端进行数据交换。 - 收发数据,使用`Read()`和`Write()`方法...
Oracle 数据库备份与还原实例 Oracle 数据库备份与还原是数据库管理的重要步骤,涉及到数据的安全性和可靠性。本文将介绍 Oracle 数据库备份与还原实例,使用 exp 与 imp 方式导出和导入数据,同时也包含 Linux ...
介绍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...
在进行Oracle 19c RAC(Real Application Clusters)数据库的数据备份与恢复操作时,可能会遇到需要将RAC集群环境下的备份数据恢复到单实例环境中的场景。这种情况下,RMAN(Recovery Manager)作为Oracle提供的强大...
**iscroll5上拉下拉实例完整demo**是基于iscroll5库的一个示例项目,主要针对移动Web环境,展示了如何实现平滑的滚动效果,包括上拉加载更多和下拉刷新的功能。iscroll5是Jacob Gohmann开发的一个轻量级的JavaScript...
恢复是备份的反向过程,分为实例恢复和介质恢复。实例恢复是数据库实例失败后的自动恢复,而介质恢复是在存储介质故障时进行的,包括完全恢复和不完全恢复。完全恢复恢复到故障前状态,而不完全恢复则可以恢复到某一...
1、用自己采样得到的故障诊断数据分别采用Python/MATLAB两种方式对样本数据进行故障特征提取。 2、附有数据文件夹,里面包含有9种不同的故障样本集原始数据,每一种故障样本集共有100组样本。文件夹共有900组样本...
6六、增量备份恢复实例 通过不同时间点的全备、增量备份和累积备份,可以实现对数据库的精确恢复。例如: - A时间点全备:作为基础备份。 - B时间点增量备份:仅包含自A时间点以来的变化。 - C时间点累积备份:包含A...