题目:创建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 ...
标签"LabWindows/CVI逐步深入与开发实例 光盘"进一步强调了学习路径的系统性和实践性,光盘中的内容可能被划分为不同阶段,每个阶段都包含相关实例,用户可以通过这些实例进行自我测试和技能提升。 在压缩包子文件...
C#2005实例数据库附加/还原/备份/分离/删除等操作,方便数据库的管理,在不需要登录SQL管理器,就能操作。直观。同时可以换皮肤设置等。
mysql 备份脚本实例,本人亲测,可以正常使用,需要根据真实路径修改相关配置
本文实例讲述了Python实现备份文件的方法,是一个非常实用的技巧。分享给大家供大家参考。具体方法如下: 该实例主要实现读取一个任务文件, 根据指定的任务参数自动备份. 任务文件的格式: (注意,分号后面注释是不...
金蝶云(K3/cloud)WebAPI开发实例是针对企业级财务管理软件金蝶云的API接口进行编程实践的示例项目。金蝶云,原名K3,是金蝶国际软件集团推出的一款云端ERP解决方案,它为企业提供了全面的财务、供应链、生产制造等...
根据提供的文件内容,本文将详细解释RMAN(Recovery Manager)在Oracle数据库中的备份与恢复操作,特别是关于归档模式的设置以及RMAN的各种命令应用。 ### 一、归档模式设置 #### 1. 设置数据库为归档模式 为了...
LIS通信相关,HL7协议/ASTM协议介绍及实例,内含若干厂家的说明文档
"Linux环境下RMAN备份实例脚本" 本文档介绍了在Linux环境下使用RMAN进行数据库备份的实例脚本。RMAN(Recovery Manager)是Oracle数据库中的一个备份和恢复工具,用于管理和维护数据库的备份和恢复。 背景 _target...
- 在循环中等待客户端连接,使用`AcceptTcpClient()`方法阻塞直到有客户端连接。 - 当客户端连接时,创建一个新的网络流(NetworkStream)对象,与客户端进行数据交换。 - 收发数据,使用`Read()`和`Write()`方法...
Oracle 数据库备份与还原实例 Oracle 数据库备份与还原是数据库管理的重要步骤,涉及到数据的安全性和可靠性。本文将介绍 Oracle 数据库备份与还原实例,使用 exp 与 imp 方式导出和导入数据,同时也包含 Linux ...
在本资源中,我们关注的是一个C/C++软件项目的开发实例,特别是一个完整的"Internet图片验证码系统"。这个实例提供了一整套的标准文档、源代码以及其他相关材料,旨在帮助学习者理解和实践C/C++编程中的模块化编程...
介绍oracle热备基础知识,包含备份检查,增量备份,各数据库文件备份方法等。
书名:《C/C++串口通信典型应用实例编程实践》(电子工业出版社.曹卫杉) PDF扫描版,全书共分10章,共316页。 内容介绍 本书从工程应用的角度出发,对目前流行的三种不同类型的C/C++语言(包括C++ Builder、Visual ...
在进行Oracle 19c RAC(Real Application Clusters)数据库的数据备份与恢复操作时,可能会遇到需要将RAC集群环境下的备份数据恢复到单实例环境中的场景。这种情况下,RMAN(Recovery Manager)作为Oracle提供的强大...
这个实例源代码提供了一种方法,帮助开发者实现数据库的自动或手动备份。以下是基于标题和描述所涉及的关键知识点的详细解释: 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 保护数据的意义 数据的价值不容小觑,特别是在商业领域,许多关键决策都需要依赖准确的数据来进行。一旦这些数据丢失...
本压缩包文件提供了10个详细的Java B/S开发实例,涵盖了该领域的核心知识点,旨在帮助开发者深入理解并掌握这种架构的实现。 1. **Servlet技术**:在Java B/S开发中,Servlet是服务器端处理HTTP请求的核心组件。每...