From 5e9adb0339aa8b0820544744e9a8d32265662923 Mon Sep 17 00:00:00 2001 From: Woonduk Kang Date: Wed, 21 Jan 2015 14:09:08 +0900 Subject: [PATCH] AtomicMaxUpdater refactoring --- .../interceptor/AtomicMaxUpdater.java | 15 ++++--- .../interceptor/AtomicMaxUpdaterTest.java | 42 +++++++++++++++++++ 2 files changed, 51 insertions(+), 6 deletions(-) create mode 100644 bootstrap-core/src/test/java/com/navercorp/pinpoint/bootstrap/interceptor/AtomicMaxUpdaterTest.java diff --git a/bootstrap-core/src/test/java/com/navercorp/pinpoint/bootstrap/interceptor/AtomicMaxUpdater.java b/bootstrap-core/src/test/java/com/navercorp/pinpoint/bootstrap/interceptor/AtomicMaxUpdater.java index 2bf67518386d..44138c4764ef 100644 --- a/bootstrap-core/src/test/java/com/navercorp/pinpoint/bootstrap/interceptor/AtomicMaxUpdater.java +++ b/bootstrap-core/src/test/java/com/navercorp/pinpoint/bootstrap/interceptor/AtomicMaxUpdater.java @@ -1,28 +1,31 @@ package com.navercorp.pinpoint.bootstrap.interceptor; -import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicIntegerFieldUpdater; /** * @author emeroad */ public class AtomicMaxUpdater { - private final AtomicInteger maxIndex = new AtomicInteger(-1); + private static final AtomicIntegerFieldUpdater UPDATER = AtomicIntegerFieldUpdater.newUpdater(AtomicMaxUpdater.class, "maxIndex"); - public boolean updateMax(int max) { + private volatile int maxIndex = 0; + + public boolean update(int max) { while (true) { - final int currentMax = maxIndex.get(); + final int currentMax = getIndex(); if (currentMax >= max) { return false; } - final boolean update = maxIndex.compareAndSet(currentMax, max); + final boolean update = UPDATER.compareAndSet(this, currentMax, max); if (update) { return true; } } } + public int getIndex() { - return maxIndex.get(); + return UPDATER.get(this); } } diff --git a/bootstrap-core/src/test/java/com/navercorp/pinpoint/bootstrap/interceptor/AtomicMaxUpdaterTest.java b/bootstrap-core/src/test/java/com/navercorp/pinpoint/bootstrap/interceptor/AtomicMaxUpdaterTest.java new file mode 100644 index 000000000000..cee61b51e8bc --- /dev/null +++ b/bootstrap-core/src/test/java/com/navercorp/pinpoint/bootstrap/interceptor/AtomicMaxUpdaterTest.java @@ -0,0 +1,42 @@ +/* + * Copyright 2014 NAVER Corp. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.pinpoint.bootstrap.interceptor; + +import junit.framework.Assert; +import org.junit.Test; + +/** + * @author emeroad + */ +public class AtomicMaxUpdaterTest { + @Test + public void update() { + AtomicMaxUpdater updater = new AtomicMaxUpdater(); + + Assert.assertFalse(updater.update(0)); + + + Assert.assertTrue(updater.update(1)); + + Assert.assertTrue(updater.update(10)); + + Assert.assertFalse(updater.update(5)); + Assert.assertEquals(updater.getIndex(), 10); + + + } +}