了send方法,可以传入回调接口。同时还加上了线程等待,注意这里的判断参数,要换成线程安全的AtomicBoolean
时间: 2024-10-22 09:15:59 浏览: 10
swift-用Block实现的通知替代方案解决跨多个界面回调繁琐等问题
`send`方法通常用于异步通信场景,它接受一个回调接口作为参数,当发送操作完成时,会通过这个接口通知接收方。为了保证线程安全,特别是涉及到多线程环境,这里引入了一个`AtomicBoolean`变量来进行判断。`AtomicBoolean`是一个原子类,它的布尔值可以在多个线程之间共享并保持数据的一致性,而无需同步锁。
具体实现可能是这样的:
```java
import java.util.concurrent.atomic.AtomicBoolean;
public class Sender {
private final AtomicBoolean isSending = new AtomicBoolean(false); // 线程安全的标记
public void send(Callback callback) {
if (isSending.compareAndSet(false, true)) { // 判断是否正在发送,如果没在发送则设置为true
new Thread(() -> {
try {
// 异步发送操作...
// 当发送完成后...
callback.onSuccess();
} catch (Exception e) {
callback.onError(e);
} finally {
isSending.set(false); // 发送结束后恢复为未发送状态
}
}).start();
} else {
callback.onError(new IllegalStateException("Already sending")); // 如果已发送,则抛异常
}
}
interface Callback {
void onSuccess();
void onError(Exception error);
}
}
```
阅读全文