Tuesday, May 10, 2016

Min Max Keeper - Multi-Thread



* Write a program which keeps min and max value in threadsafe way
* Support 2 apis
* void updateMaxMin(int val)
* int getMin()
* int getMax()
*
* Solution
* Use compareAndSet method of AtomicInteger to update min and max
public class MinMaxKeeper {

    private AtomicInteger min = new AtomicInteger(Integer.MAX_VALUE);
    private AtomicInteger max = new AtomicInteger(Integer.MIN_VALUE);
 
    /**
     * Threadsafe way of updating min and max
     * @param value
     */
    public void updateMinMax(int value){
        //update min
        while(true){
            //if value is greater than whatever is in min just break right away
            int minVal = min.get();
            if(value >= minVal){
                break;
            }
            //try to update value only if minVal is in min
            boolean isSetSuccesful = min.compareAndSet(minVal, value);
            //if set was successful break from while loop else keep looping
            if(isSetSuccesful){
                break;
            }
        }
     
        //update max
        while(true){
            int maxVal = max.get();
            if(value <= maxVal){
                break;
            }
            boolean isSetSuccesful = max.compareAndSet(maxVal, value);
            if(isSetSuccesful){
                break;
            }
        }
    }
 
    public int getMin(){
        return min.get();
    }
 
    public int getMax(){
        return max.get();
    }
}    

Labels

Review (572) System Design (334) System Design - Review (198) Java (189) Coding (75) Interview-System Design (65) Interview (63) Book Notes (59) Coding - Review (59) to-do (45) Linux (43) Knowledge (39) Interview-Java (35) Knowledge - Review (32) Database (31) Design Patterns (31) Big Data (29) Product Architecture (28) MultiThread (27) Soft Skills (27) Concurrency (26) Cracking Code Interview (26) Miscs (25) Distributed (24) OOD Design (24) Google (23) Career (22) Interview - Review (21) Java - Code (21) Operating System (21) Interview Q&A (20) System Design - Practice (20) Tips (19) Algorithm (17) Company - Facebook (17) Security (17) How to Ace Interview (16) Brain Teaser (14) Linux - Shell (14) Redis (14) Testing (14) Tools (14) Code Quality (13) Search (13) Spark (13) Spring (13) Company - LinkedIn (12) How to (12) Interview-Database (12) Interview-Operating System (12) Solr (12) Architecture Principles (11) Resource (10) Amazon (9) Cache (9) Git (9) Interview - MultiThread (9) Scalability (9) Trouble Shooting (9) Web Dev (9) Architecture Model (8) Better Programmer (8) Cassandra (8) Company - Uber (8) Java67 (8) Math (8) OO Design principles (8) SOLID (8) Design (7) Interview Corner (7) JVM (7) Java Basics (7) Kafka (7) Mac (7) Machine Learning (7) NoSQL (7) C++ (6) Chrome (6) File System (6) Highscalability (6) How to Better (6) Network (6) Restful (6) CareerCup (5) Code Review (5) Hash (5) How to Interview (5) JDK Source Code (5) JavaScript (5) Leetcode (5) Must Known (5) Python (5)

Popular Posts