当前位置: 主页 > JAVA语言

java多线程数据同步-java实现数据增量同步

发布时间:2023-02-08 11:04   浏览次数:次   作者:佚名

什么是同步器

多个线程的并发执行是通过一个共享状态来同步的。 只有当状态满足xxxx条件时,才能触发线程执行xxxx。

这种通用的语义可以称为同步器。 可以认为以上所有的锁机制都可以基于synchronizer定制来实现。

交换器

可以成对配对和交换元素的线程的同步点。 每个线程在交换方法的入口处提供一个方法,与伙伴线程匹配java多线程数据同步,并在返回时接收其伙伴的对象。 Exchanger 可以被认为是 SynchronousQueue 的双向形式。 交换器可能在遗传算法和管道设计等应用中很有用。

用法示例: 下面是一个高亮显示的类,它使用Exchanger在线程之间交换缓冲区,这样在需要的时候,填充缓冲区的线程得到一个新腾出的缓冲区,并将填充好的缓冲区传递给腾出缓冲区的线程。

java开线程导入大量数据_java实现数据增量同步_java多线程数据同步

java开线程导入大量数据_java多线程数据同步_java实现数据增量同步

类 FillAndEmpty {

交换器exchanger = new Exchanger();

DataBuffer initialEmptyBuffer = ... 虚构的类型

数据缓冲区 initialFullBuffer = ...

类 FillingLoop 实现 Runnable {

公共无效运行(){

DataBuffer currentBuffer = initialEmptyBuffer;

java开线程导入大量数据_java实现数据增量同步_java多线程数据同步

尝试 {

while (currentBuffer != null) {

添加到缓冲区(当前缓冲区);

如果(currentBuffer.isFull())

当前缓冲区 = 交换器。 交换(当前缓冲区);

}

} catch (InterruptedException ex) { ... 处理 ... }

java实现数据增量同步_java开线程导入大量数据_java多线程数据同步

}

}

类 EmptyingLoop 实现 Runnable {

公共无效运行(){

DataBuffer currentBuffer = initialFullBuffer;

尝试 {

while (currentBuffer != null) {

java开线程导入大量数据_java实现数据增量同步_java多线程数据同步

takeFromBuffer(currentBuffer);

如果(currentBuffer.isEmpty())

当前缓冲区 = 交换器。 交换(当前缓冲区);

}

} catch (InterruptedException ex) { ... 处理 ... }

}

}

java多线程数据同步_java开线程导入大量数据_java实现数据增量同步

无效开始(){

新线程(新填充循环())。开始();

新线程(新 EmptyingLoop())。开始();

}

}

java实现数据增量同步_java多线程数据同步_java开线程导入大量数据

尚学堂立志解决中国教育不公平、效率低下的问题java多线程数据同步,帮助成千上万被传统教育方式耽误的人,传授实用的前沿知识,成就学生的个人理想,创造一个让爱你的人和你爱的人过上更好的生活。 尚学堂12支精英团队+各类实战项目,真正做到1+1>10的目标效果。 帮助学生快速成长,长期腾飞,成就学生“高富帅”人生。