Environment
Dubbo version: master
Step to reproduce this issue

```java
public boolean isAllowable() {
        long now = System.currentTimeMillis();
        if (now > lastResetTime + interval) {
            token.set(rate);
            lastResetTime = now;
        }

        int value = token.get();
        boolean flag = false;
        while (value > 0 && !flag) {
            flag = token.compareAndSet(value, value - 1);
            value = token.get();
        }

        return flag;
    }
```

Expected Result
lastResetTime 共享变量是否有内存可见性问题

```java
 if (now > lastResetTime + interval) {
            token.set(rate);
            lastResetTime = now;
        }
```

有并发问题吗？

private StatItem statItem;
    @AfterEach
    public void tearDown() throws Exception {
        statItem = null;
    }
    @Test
    public void testIsAllowable() throws Exception {
        statItem = new StatItem("test", 5, 1000L);
        long lastResetTime = statItem.getLastResetTime();
        assertTrue(statItem.isAllowable());
        Thread.sleep(1100L);
        assertTrue(statItem.isAllowable());
        assertTrue(lastResetTime != statItem.getLastResetTime());
        assertEquals(4, statItem.getToken());
    }
    @Test
    public void testAccuracy() throws Exception {
        final int EXPECTED_RATE = 5;
        statItem = new StatItem("test", EXPECTED_RATE, 60_000L);
        for (int i = 1; i <= EXPECTED_RATE; i++) {
            assertEquals(true, statItem.isAllowable());
        }
        
        assertEquals(false, statItem.isAllowable());
    }
}