Concurrent in queue of Linkedlist












-1















multiple threads add elements to the same queue in parallel and other threads consume elements in it.



When I use LinkedList in the example below, the queue will end up with serveral null value in it, and the size is a constant value. No matter how many times the /consumer is requested, the queue still has null value and the size is non-zero.



So I change Linkedlist to ConcurrentLinkedQueue and the problem disappear.It seems a thread-safe problem.



How can queue has null element? why queue.poll() can't poll the null element in queue?



Example:



@RestController
@RequestMapping("/v1")
public class SendController {

public static Queue<String> queue = new ConcurrentLinkedQueue<>();//ok
public static Queue<String> queue = new LinkedList<>();//will have null value in it and can't poll from it


@GetMapping(value = "/produce")
public String pro() {
String s = UUID.randomUUID().toString();
queue.add(s);
return "true";
}

@GetMapping(value = "/consume")
public String con() {
if(queue.size() == 0) {
return null;
}
return queue.poll();
}









share|improve this question




















  • 3





    Please read How to Ask and provide a Minimal, Complete, and Verifiable example.

    – Rafael
    Jan 3 at 4:16
















-1















multiple threads add elements to the same queue in parallel and other threads consume elements in it.



When I use LinkedList in the example below, the queue will end up with serveral null value in it, and the size is a constant value. No matter how many times the /consumer is requested, the queue still has null value and the size is non-zero.



So I change Linkedlist to ConcurrentLinkedQueue and the problem disappear.It seems a thread-safe problem.



How can queue has null element? why queue.poll() can't poll the null element in queue?



Example:



@RestController
@RequestMapping("/v1")
public class SendController {

public static Queue<String> queue = new ConcurrentLinkedQueue<>();//ok
public static Queue<String> queue = new LinkedList<>();//will have null value in it and can't poll from it


@GetMapping(value = "/produce")
public String pro() {
String s = UUID.randomUUID().toString();
queue.add(s);
return "true";
}

@GetMapping(value = "/consume")
public String con() {
if(queue.size() == 0) {
return null;
}
return queue.poll();
}









share|improve this question




















  • 3





    Please read How to Ask and provide a Minimal, Complete, and Verifiable example.

    – Rafael
    Jan 3 at 4:16














-1












-1








-1








multiple threads add elements to the same queue in parallel and other threads consume elements in it.



When I use LinkedList in the example below, the queue will end up with serveral null value in it, and the size is a constant value. No matter how many times the /consumer is requested, the queue still has null value and the size is non-zero.



So I change Linkedlist to ConcurrentLinkedQueue and the problem disappear.It seems a thread-safe problem.



How can queue has null element? why queue.poll() can't poll the null element in queue?



Example:



@RestController
@RequestMapping("/v1")
public class SendController {

public static Queue<String> queue = new ConcurrentLinkedQueue<>();//ok
public static Queue<String> queue = new LinkedList<>();//will have null value in it and can't poll from it


@GetMapping(value = "/produce")
public String pro() {
String s = UUID.randomUUID().toString();
queue.add(s);
return "true";
}

@GetMapping(value = "/consume")
public String con() {
if(queue.size() == 0) {
return null;
}
return queue.poll();
}









share|improve this question
















multiple threads add elements to the same queue in parallel and other threads consume elements in it.



When I use LinkedList in the example below, the queue will end up with serveral null value in it, and the size is a constant value. No matter how many times the /consumer is requested, the queue still has null value and the size is non-zero.



So I change Linkedlist to ConcurrentLinkedQueue and the problem disappear.It seems a thread-safe problem.



How can queue has null element? why queue.poll() can't poll the null element in queue?



Example:



@RestController
@RequestMapping("/v1")
public class SendController {

public static Queue<String> queue = new ConcurrentLinkedQueue<>();//ok
public static Queue<String> queue = new LinkedList<>();//will have null value in it and can't poll from it


@GetMapping(value = "/produce")
public String pro() {
String s = UUID.randomUUID().toString();
queue.add(s);
return "true";
}

@GetMapping(value = "/consume")
public String con() {
if(queue.size() == 0) {
return null;
}
return queue.poll();
}






java linked-list queue thread-safety






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Jan 3 at 8:07







teek

















asked Jan 3 at 4:12









teekteek

307215




307215








  • 3





    Please read How to Ask and provide a Minimal, Complete, and Verifiable example.

    – Rafael
    Jan 3 at 4:16














  • 3





    Please read How to Ask and provide a Minimal, Complete, and Verifiable example.

    – Rafael
    Jan 3 at 4:16








3




3





Please read How to Ask and provide a Minimal, Complete, and Verifiable example.

– Rafael
Jan 3 at 4:16





Please read How to Ask and provide a Minimal, Complete, and Verifiable example.

– Rafael
Jan 3 at 4:16












1 Answer
1






active

oldest

votes


















0














Poll method return null if queue is empty and it can poll null element also.Why null elements are coming within the queue it is strange



package test;



import java.util.LinkedList;

public class TestLL {

public static void main(String args) {
// TODO Auto-generated method stub

LinkedList<String> ll = new LinkedList<>();
System.out.println(ll.poll());
System.out.println(ll.size());
String s = "abc";
ll.add(s);
s = null;

ll.add("cde");

ll.add("efg");

System.out.println(ll.size());

String pollStr = ll.poll();

System.out.println("pollStr=" + pollStr);

System.out.println(ll.size());
System.out.println(ll.poll());
System.out.println(ll.poll());
System.out.println(ll.poll());
System.out.println(ll.poll());
System.out.println();
ll.add(null);
System.out.println(ll.size());
System.out.println(ll.poll());
System.out.println(ll.size());
}

}





share|improve this answer

























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54016258%2fconcurrent-in-queue-of-linkedlist%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    Poll method return null if queue is empty and it can poll null element also.Why null elements are coming within the queue it is strange



    package test;



    import java.util.LinkedList;

    public class TestLL {

    public static void main(String args) {
    // TODO Auto-generated method stub

    LinkedList<String> ll = new LinkedList<>();
    System.out.println(ll.poll());
    System.out.println(ll.size());
    String s = "abc";
    ll.add(s);
    s = null;

    ll.add("cde");

    ll.add("efg");

    System.out.println(ll.size());

    String pollStr = ll.poll();

    System.out.println("pollStr=" + pollStr);

    System.out.println(ll.size());
    System.out.println(ll.poll());
    System.out.println(ll.poll());
    System.out.println(ll.poll());
    System.out.println(ll.poll());
    System.out.println();
    ll.add(null);
    System.out.println(ll.size());
    System.out.println(ll.poll());
    System.out.println(ll.size());
    }

    }





    share|improve this answer






























      0














      Poll method return null if queue is empty and it can poll null element also.Why null elements are coming within the queue it is strange



      package test;



      import java.util.LinkedList;

      public class TestLL {

      public static void main(String args) {
      // TODO Auto-generated method stub

      LinkedList<String> ll = new LinkedList<>();
      System.out.println(ll.poll());
      System.out.println(ll.size());
      String s = "abc";
      ll.add(s);
      s = null;

      ll.add("cde");

      ll.add("efg");

      System.out.println(ll.size());

      String pollStr = ll.poll();

      System.out.println("pollStr=" + pollStr);

      System.out.println(ll.size());
      System.out.println(ll.poll());
      System.out.println(ll.poll());
      System.out.println(ll.poll());
      System.out.println(ll.poll());
      System.out.println();
      ll.add(null);
      System.out.println(ll.size());
      System.out.println(ll.poll());
      System.out.println(ll.size());
      }

      }





      share|improve this answer




























        0












        0








        0







        Poll method return null if queue is empty and it can poll null element also.Why null elements are coming within the queue it is strange



        package test;



        import java.util.LinkedList;

        public class TestLL {

        public static void main(String args) {
        // TODO Auto-generated method stub

        LinkedList<String> ll = new LinkedList<>();
        System.out.println(ll.poll());
        System.out.println(ll.size());
        String s = "abc";
        ll.add(s);
        s = null;

        ll.add("cde");

        ll.add("efg");

        System.out.println(ll.size());

        String pollStr = ll.poll();

        System.out.println("pollStr=" + pollStr);

        System.out.println(ll.size());
        System.out.println(ll.poll());
        System.out.println(ll.poll());
        System.out.println(ll.poll());
        System.out.println(ll.poll());
        System.out.println();
        ll.add(null);
        System.out.println(ll.size());
        System.out.println(ll.poll());
        System.out.println(ll.size());
        }

        }





        share|improve this answer















        Poll method return null if queue is empty and it can poll null element also.Why null elements are coming within the queue it is strange



        package test;



        import java.util.LinkedList;

        public class TestLL {

        public static void main(String args) {
        // TODO Auto-generated method stub

        LinkedList<String> ll = new LinkedList<>();
        System.out.println(ll.poll());
        System.out.println(ll.size());
        String s = "abc";
        ll.add(s);
        s = null;

        ll.add("cde");

        ll.add("efg");

        System.out.println(ll.size());

        String pollStr = ll.poll();

        System.out.println("pollStr=" + pollStr);

        System.out.println(ll.size());
        System.out.println(ll.poll());
        System.out.println(ll.poll());
        System.out.println(ll.poll());
        System.out.println(ll.poll());
        System.out.println();
        ll.add(null);
        System.out.println(ll.size());
        System.out.println(ll.poll());
        System.out.println(ll.size());
        }

        }






        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Jan 3 at 6:24









        Farhana

        2,67752335




        2,67752335










        answered Jan 3 at 5:53









        vivekdubeyvivekdubey

        1516




        1516
































            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54016258%2fconcurrent-in-queue-of-linkedlist%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            generate and download xml file after input submit (php and mysql) - JPK

            Angular Downloading a file using contenturl with Basic Authentication

            Can't read property showImagePicker of undefined in react native iOS