Java tutorial
//package com.java2s; /************************************************************************* * * * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * * All rights reserved. Email: russ@q12.org Web: www.q12.org * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of EITHER: * * (1) The GNU Lesser General Public License as published by the Free * * Software Foundation; either version 2.1 of the License, or (at * * your option) any later version. The text of the GNU Lesser * * General Public License is included with this library in the * * file LICENSE.TXT. * * (2) The BSD-style license that is included with this library in * * the file LICENSE-BSD.TXT. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * * LICENSE.TXT and LICENSE-BSD.TXT for more details. * * * *************************************************************************/ import java.util.concurrent.atomic.AtomicInteger; public class Main { public static int ThrsafeIncrementIntUpToLimit(AtomicInteger storagePointer, int limitValue) { // unsigned int resultValue; // while (true) { // resultValue = *storagePointer; // if (resultValue == limitValue) { // break; // } // if (ThrsafeCompareExchange((volatile atomicord32 *)storagePointer, (atomicord32)resultValue, (atomicord32)(resultValue + 1))) { // break; // } // } // return resultValue; int resultValue; while (true) { resultValue = storagePointer.get(); if (resultValue == limitValue) { break; } if (ThrsafeCompareExchange(storagePointer, resultValue, resultValue + 1)) { break; } } return resultValue; } static boolean ThrsafeCompareExchange(AtomicInteger paoDestination, int aoComparand, int aoExchange) { //return (*paoDestination == aoComparand) ? ((*paoDestination = aoExchange), true) : false; return paoDestination.compareAndSet(aoComparand, aoExchange); } }