Java多线程编程3--线程间通信实例--等待/通知之交叉备份
来源:互联网 发布:大学生兼职平台知乎 编辑:程序博客网 时间:2024/05/17 09:25
题目:创建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线程交替备份的效果
0 0
- Java多线程编程3--线程间通信实例--等待/通知之交叉备份
- Java多线程之线程间通信--等待(wait)/通知(notify)机制,等待/通知之交叉备份实例
- java多线程之线程间通信:等待/通知机制
- Java多线程编程3--线程间通信--等待(wait)/通知(notify)机制
- JAVA多线程-线程间通信(一)-等待/通知机制(wait/notify)
- Java 并发 线程间通信 等待/通知的经典范式
- Java线程等待、通知简单实例代码
- java多线程学习之线程通信-wait()等待 notify()唤醒
- java多线程——线程间通信之线程等待唤醒机制
- java多线程之 生产者和消费者 线程间通信 等待与唤醒机制
- Java多线程四:线程间通信/等待唤醒机制
- 《java多线程编程核心技术》之线程间通信
- 【Java编程】多线程之线程间的通信
- 多线程中的线程间通信及等待/通知机制的两种实现方式
- java线程之间的通信(等待/通知机制)
- Java线程之间的通信-等待/通知机制
- java线程之间的通信(等待/通知机制)
- java线程之间的通信(等待/通知机制)
- 数据挖掘十大算法
- vector和Hashtable
- 001 java 线程基础
- java多线程循环打印A,B,C
- std::string源码探秘和性能分析
- Java多线程编程3--线程间通信实例--等待/通知之交叉备份
- Cortex-M3 堆栈操作
- spring session,集群环境下的session共享解决方案
- linux 命令学习之 sort
- 全局变量$_SERVER
- Yarn源码分析之MapReduce作业中任务Task调度整体流程(一)
- DatabaseMetaData元数据
- LeetCode-6.ZigZag Conversion
- CUDA reference