首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >馆长LeaderLatch EOFException关机

馆长LeaderLatch EOFException关机
EN

Stack Overflow用户
提问于 2020-04-14 10:44:46
回答 1查看 74关注 0票数 0

我们使用LeaderLatch在我的集群中选择领导者。

我们这样使用它:

代码语言:javascript
复制
leaderLatch.addListener(new LeaderLatchListener() {

                                    @Override
                                    public void isLeader() {
                                      // create leader tasks runner
                                    }

                                    @Override
                                    public void notLeader() {
                                        // shutdown leader tasks runner
                                });

                                leaderLatch.start();
                                leaderLatch.await();

我们也有一个优雅的关闭过程:

代码语言:javascript
复制
                CloseableUtils.closeQuietly(leaderLatch);

现在,问题是当我关闭一个非领导者实例时,await()方法抛出一个EOFException。

这是来自LeaderLatch本身的代码:

代码语言:javascript
复制
public void await() throws InterruptedException, EOFException
    {
        synchronized(this)
        {
            while ( (state.get() == State.STARTED) && !hasLeadership.get() )
            {
                wait();
            }
        }
        if ( state.get() != State.STARTED )
        {
            throw new EOFException();
        }
    }

因为我已经关闭了它--状态不是启动而是关闭的,所以抛出空的EOFException。

有更好的办法吗?

我们使用curator-recepies-4.2.0

你好,伊藤

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-14 23:25:46

await()的合同是在拥有锁之前不返回。除了抛出异常之外,它无法指示您不拥有该锁。我建议您使用“等待”的版本,该版本需要超时并返回布尔值。然后您可以关闭锁并检查await()的结果。如果你愿意的话,可以在一个循环中完成这个任务。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61205855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档