スレッド間通信の通知を待っています

バックアップ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データベースバックアップし
    たデータベースまで戻ります

おすすめ

転載: blog.csdn.net/qq_29897369/article/details/96774391