バックアップAデータ、バックアップBデータをシミュレートすることにより、スレッドの代替実行を実現します。同期を実現するための方法と同期
- ツールの作成、変数の設定、スレッドの制御を交互に行う
package com.dairuijie.thread.test01;
/**
-
- @ClassName: DBUtils
- @Description:TODO(实现备份交替运行)
- @author: drj
- @date: 2019年7月21日 下午10:17:51
-
- @Copyright: 2019
- */
public class DBUtils {
volatile private boolean flag = true;
public synchronized void backUpA() {
try {
while (flag == true) {
wait();
}
System.out.println("备份A数据库");
flag = true;
notifyAll();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public synchronized void backUpB() {
try {
while (flag == false) {
wait();
}
System.out.println("备份B数据库");
flag = false;
notifyAll();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
`
- バックアップを作成するデータベーススレッド
package com.dairuijie.thread.test01;
/**
*
* @ClassName: BackUpA
* @Description:TODO(备份A 数据)
* @author: drj
* @date: 2019年7月21日 下午10:22:57
*
* @Copyright: 2019
*
*/
public class BackUpA extends Thread {
private DBUtils utils;
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
utils.backUpA();
}
public BackUpA(DBUtils utils) {
super();
this.utils = utils;
}
}
- バックアップBデータベーススレッド
package com.dairuijie.thread.test01;
/**
*
* @ClassName: BackUpB
* @Description:TODO(备份B 线程)
* @author: drj
* @date: 2019年7月21日 下午10:20:53
*
* @Copyright: 2019
*
*/
public class BackUpB extends Thread {
private DBUtils utils;
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
utils.backUpB();
}
public BackUpB(DBUtils utils) {
super();
this.utils = utils;
}
}
- テスト
package com.dairuijie.thread.test01;
public class Demo {
public static void main(String[] args) {
DBUtils db = new DBUtils();
for (int i = 0; i < 10; i++) {
BackUpA a = new BackUpA(db);
a.start();
BackUpB b = new BackUpB(db);
b.start();
}
}
}
- 効果
バックアップBデータベース
バックアップAデータベース
バックアップBデータベース
バックアップAデータベース
バックアップBデータベース
バックアップAデータベース
バックアップBデータベース
バックアップAデータベース
バックアップBデータベース
バックアップAデータベース
バックアップBデータベース
バックアップAデータベース
バックアップBデータベースをバックアップ
データベースをバックアップ戻る
Bデータベースバックアップし
たデータベースバックアップし
、バックアップBデータベース
データベースをバックアップ戻る
Bデータベースバックアップし
たデータベースまで戻ります