1 /** 2 * Licensed to the Apache Software Foundation (ASF) under one 3 * or more contributor license agreements. See the NOTICE file 4 * distributed with this work for additional information 5 * regarding copyright ownership. The ASF licenses this file 6 * to you under the Apache License, Version 2.0 (the 7 * "License"); you may not use this file except in compliance 8 * with the License. You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 */ 18 package org.apache.hadoop.hbase.util; 19 20 import java.util.concurrent.atomic.AtomicLong; 21 22 import org.apache.hadoop.hbase.classification.InterfaceAudience; 23 24 /** 25 * Utilities related to atomic operations. 26 */ 27 @InterfaceAudience.Private 28 public class AtomicUtils { 29 /** 30 * Updates a AtomicLong which is supposed to maintain the minimum values. This method is not 31 * synchronized but is thread-safe. 32 */ 33 public static void updateMin(AtomicLong min, long value) { 34 while (true) { 35 long cur = min.get(); 36 if (value >= cur) { 37 break; 38 } 39 40 if (min.compareAndSet(cur, value)) { 41 break; 42 } 43 } 44 } 45 46 /** 47 * Updates a AtomicLong which is supposed to maintain the maximum values. This method is not 48 * synchronized but is thread-safe. 49 */ 50 public static void updateMax(AtomicLong max, long value) { 51 while (true) { 52 long cur = max.get(); 53 if (value <= cur) { 54 break; 55 } 56 57 if (max.compareAndSet(cur, value)) { 58 break; 59 } 60 } 61 } 62 63 }