一、概述
Balking 中文翻译为 “停止”。
多个线程监控某个共享变量,当 共享变量发生变化时对其进行操作,此时变量发生变化,A线程先发现并进行操作,B线程此时也发现了共享变量的变化,不过同时发现线程 A 已经在进行操作,此时线程 B 便取消了对共享变量的操作,这个取消动作就是 Balking 。
比如:在编辑文档时,Ctrl + s
会生成一个线程执行保存操作,在同一时间同时按多次 ctrl+s
生成多个线程执行保存。而线程获取时间片执行存在先后顺序,如果某一个线程完成了保存操作,其他线程获取到时间片后,无需在执行保存操作,直接停止,这就是 Balking 。
二、简单实现
模拟文档保存
多个线程同时触发保存,但是只要有一个线程执行保存操作成功,其余线程直接停止工作,无需在执行保存操作。
简单实现代码如下: