Which List should be used, to remove in a thread safe way?

Hello all,
I plan to have a List, where n number of Threads will accessing the List.
When two or more thread trying to remove an equals items from the List, only one of the thread will remove successfully (i,e, remove(Object o) will return true). The rest of the threads will realize remove(Object o) returns false
I wish to achieve this. I know that I can achieve by using :
Collections.synchronizedList(new ArrayList(...))However, I afraid having the synchronized block will slow down my execution speed. Is there other way, that I achieve the same objective with faster speed? For example, using CopyOnWriteArrayList?
Thanks!

Sorry,
I said "badly" because it is synchornized by putting "synchronized" keyword on most of the methods prototypes.
Which equals to synchronizing on "this".
In my opinion, one problem of this implementation is that 2 calls to a get() method will be synchronized wherever they dont need to. (As get() does not modify the vector). [See Edit]
One other is you can synchronize on the Vector's mutex (itself) outside of the Vector's code.
And at last, as synchronizedList is not implemented by a Vector and is more recent than the Vector implementation...
I guess they implemented it in another way for many good reasons...
[Edit]
As i can see in Collections, the synchronizedList is implemented in the same way.
BUT, as the synchronized keyword is not in the method's prototype, we can expect the implementation to be changed a day...
And vector is a kind of old object kept for backward compatibility i guess. (someone can confirm ?). ("As of the Java 2 platform v1.2, this class has been retrofitted to implement List, so that it becomes a part of Java's collection framework.")
@KwangHooi
You can write your own implementation of a List which will not synchronize on the same token for both read/write operations. (but, i guess it could be hard to avoid deadlocks)

Similar Messages

  • How can I use a Selector in a thread safe way?

    Hello,
    I'm using a server socket with a java.nio.channels.Selector contemporarily by 3 different threads (this number may change in the future).
    From the javadoc: Selectors are themselves safe for use by multiple concurrent threads; their key sets, however, are not.
    Following this advise, I wrote code in this way:
             List keys = new LinkedList(); //private key list for each thread
             while (true) {
              keys.clear();
              synchronized(selector) {
                  int num = selector.select();
                  if (num == 0)
                   continue;
                  Set selectedKeys = selector.selectedKeys();
                  //I expected this code to produce disjoint key sets on each thread...
                  keys.addAll(selectedKeys);
                  selectedKeys.clear();
              Iterator it = keys.iterator();
              while (it.hasNext()) {
                  SelectionKey key = (SelectionKey) it.next();
                  if ((key.readyOps() & SelectionKey.OP_ACCEPT) == SelectionKey.OP_ACCEPT) {
                   Socket s = serverSocket.accept();
                   SocketChannel sc = s.getChannel();
                   sc.configureBlocking( false );
                   sc.register( selector, SelectionKey.OP_READ );
                  } else if ((key.readyOps() & SelectionKey.OP_READ) == SelectionKey.OP_READ) {
    //.....Unfortunately synchronizing on the selector didn't have the effect I expected. When another thread select()s, it sees the same key list as the other thread that select()ed previously. When control arrives to serverSocket.accept(), one thread goes ahead and the other two catch an IllegalBlockingModeException.
    I'm not willing to handle this exception, the right thing to do is giving disjoint key sets to each thread. How can I achieve this goal?
    Thanks in advance

    A single thread won't be enough cause after reading data from the socket I do some processing on it that may take long.So despatch that processing to a separate thread.
    Most of this processing is I/O boundI/O bound on the socket? or something else? If it's I/O bound on the socket that's even more of a reason to use a single thread.
    Anyway I think I'll use a single thread with the selector, put incoming data in a queue and let other 2 or 3 threads read from it.Precisely. Ditto outbound data.
    Thanks for your replies. But I'm still curious: why is a selector thread safe if it can't be used with multiple threads because of it's semantics?It can, but there are synchronization issues to overcome (with Selector.wakeup()), and generally the cost of solving these is much higher than the cost of a single-threaded selector solution with worker threads for the application processing.

  • Which object should i use ?

    Hi,
    I have a methode that returns several values of different types. Which objet should I use to return these values ? I thought of Vector but somebody told me that there is a better object than Vector.
    thanks for your help !
    Tex

    First, always use an interface over an object if it exists. So, your code should always declare the instance variable as List, not ArrayList or Vector or LinkedList. This allows the implementation to be optimized for the task at hand (e.g. LinkedList for arbitrary insertions or deletions of data, ArrayList for better Iterator performance, etc.) while using the interface for the common List methods (e.g., get(), add(), remove(), iterator(), etc.)
    Second, avoid Vector. Sun specifically states in the Collections tutorial that ArrayList is preferred over Vector.
    - Saish
    "My karma ran over your dogma." - Anon

  • I am a student and need to do my assignments in word. Which application should I use as I have to save all of them in older word version like 2003 to send it to my teacher?

    I am a student and need to do my assignments in word. Which application should I use as I have to save all of them in older word version like 2003 to send it to my teacher?

    You could use Microsoft Office for Mac, but I would recommend iWork! It's a better set of applications for a much better price. I have used both and I prefer it over Office. And Pages can not only open Word documents, you can also save documents in Word format. My brother and I both used iWork as an Office substitute when we were in college (I graduated a few years ago and he just graduated last night) and haven't had any compatibility issues. Check it out here http://www.apple.com/iwork/

  • I have down loaded Aurora,Beta4,firefox. Which one should i use

    I have down loaded Aurora,Beta4,and Firefox. Which won should i use.'

    That is up to you to decide. For some details about the different versions see https://developer.mozilla.org/devnews/index.php/2011/04/07/new-development-channels-and-repositories-for-rapid-releases/
    If you have not used to testing software you should stick with the release version (Firefox 4.0.1).

  • Which CPU should I use

    Hello,
    our company want to buy new computers for the developers.
    We have to use Windows XP as our OS because of third party products.
    We develop J2SE + J2EE.
    So my question:
    Which CPU should we use?
    I searched at google but didn't found any usefull sides about benchmarking an J2SE VM or J2EE VM.
    Intel or AMD?
    Are there some issues to be regarded?
    Is the behavior of the VM different if you use an Intel or an AMD? (X86)
    Our AppServer is JBoss 3.2.3.
    Has Intel ore AMD some magic improvements for the SUN Java VM?
    Any answer would be appreciated.
    Thanks,
    Oliver

    Olli_ger,
    Thanks for asking. To add more to the question, what about dual- and
    multi-processors, such as Opteron 2xx and 8xx processors?
    That is, can, and to what extent, does the Java compiler and the JVM
    utilize multi-processors? And how is this done? Threads parceled out?
    Using what algorithms? Are there "best practices" for writing code
    that can exploit these chips?
    Given the recent emergence of dual-core processors from both AMD and
    Intel I would think Sun would have a white paper on this, but I've not
    been able to find anything.
    As I'm about to build a new system, and am looking at a dual processor
    board that could take two dual-core chips, I'd really like to know.
    Thanks again for opening the issue.
    -BC

  • Which listener should be used for JTextArea

    Hi,
    I need to add a listener for JTextArea particualy when
    the text in the jtextarea is changed. I don't think
    mouse listener is enough, since the user can use tab to
    get to the jtextarea and edit the text. In this case,
    which listener should I use. Sample code would be
    helpful.
    In addition, I have a problem with the jtextarea that
    when user uses tab to go to different gui components,
    such as jtextfield, jcombobox, jtextarea, jlist, etc, the
    tab stays in the jtextarea and keeps appending to it. It does
    not go to next component, such as jlist. How can I make it
    work?
    Thanks in advance,
    Pin

    It doesn't work. Are you using 1.4 or 1.3? I am using
    1.4.
    In the 1.4 API, it says that isManagingFocus is
    "Deprecated".
    Here is what I have:
    JTextArea descrptArea = new JTextArea() {
    public boolean isManagingFocus() {
    return false;
    descrptArea.setRows(3);
    descrptArea.setLineWrap(true);
    descrptArea.addKeyListener(new KeyAdapter() {
    public void keyTyped(KeyEvent e) {
    // DO SOMETHING
    I found the following code which says it will do it.
    However, I got the exeception:
    java.lang.ClassCastException:
    n: javax.swing.KeyStroke
    at java.util.TreeMap.compare(TreeMap.java:1081)
    at java.util.TreeMap.put(TreeMap.java:459)
    at java.util.TreeSet.add(TreeSet.java:205)
    Set forwardTraversalKeys = new TreeSet();
    forwardTraversalKeys.add(KeyStroke.getKeyStroke('\t'));
    forwardTraversalKeys.add(KeyStroke.getKeyStroke(KeyEven
    .VK_TAB,
    InputEvent.CTRL_MASK));
    textArea.setFocusTraversalKeys
    (KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS,
    forwardTraversalKeys);
    Set backwardTraversalKeys = new TreeSet();
    backwardTraversalKeys.add(KeyStroke.getKeyStroke(KeyEve
    t.VK_TAB,
    InputEvent.SHIFT_MASK));
    backwardTraversalKeys.add(KeyStroke.getKeyStroke(KeyEve
    t.VK_TAB,
    InputEvent.SHIFT_MASK |InputEvent.CTRL_MASK));
    textArea.setFocusTraversalKeys(
    KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS,
    backwardTraversalKeys);
    Any idea???
    PinI'm not using 1.4 but the class cast exceptions look like they come from : Set forwardTraversalKeys=new TreeSet() etc
    try : TreeSet forwardTraversalKeys=new TreeSet()
    you cant cast from a Set to a TreeSet because a TreeSet is a Set but a Set is NOT a TreeSet.
    hope this helps.

  • Which application should i use to install facetime

    which application should I use to install facetime?

    You can save the DMG file for Mac to the desktop and install the Firefox application.
    * [[Installing Firefox on Mac]]
    * http://kb.mozillazine.org/Installing_Firefox#Mac_OS_X

  • I want to convert a pdf file into xml.Which programme should I use and how do I access it?

    I want to convert a pdf file into xml.Which programme should I use and how do I access it?I am based in India.

    Hello,
    if you create your doc files by the help of WORD, you could use a Microsoft add on (it depends of your WORD Version).
    Hans-Günter

  • Which situation should we use the text item with the item category TATX

    Dear experts!
    Thank you for your attention!
    I am confused with text item (TATX).
    which situation should we use the text item with the item category TATX????
    Someone told me that the text item is dummy and should be used as a manual of certain standard item. But the manual may be a book or several papers and it also takes up some inventory not a dummy.
    So, could some body tell me what the text item (TATX) exact is and what function it has.
    Best regard!
    Tangdark

    Hi,
    you can use TATX if you like to enter a text and to print some information between the item lines.
    Regards
    William

  • To create a web page which application should I use?

    I'm a graphic designer who works with illustrator, indesign and photoshop. To create a web page which application should I use?

    Muse (aimed at novices) or Dreamweaver (aimed at web professionals familiar with web code)

  • Which listener should I use?

    Now I want to listen the JFrame's location changing event. Which listener should i use?

    Add a ComponentListener to the JFrame

  • HT3669 which driver should i use for the epson LX300 matrix-dot printer??

    which driver should i use for the epson LX300 matrix-dot printer??? I dowloaded all drivers for epson but i didn't find the driver for the LX300.
    I bought an i mac not so long ago, can anyone help me about this?

    i use parallels desktop 7 because i use a program for work with windows XP. Is there really no solution?

  • Which forum should I use if I have JSP questions?

    Hi, pals!
    Which forum should I use if I have JSP questions?
    Cheers,
    George

    http://forum.java.sun.com/forum.jsp?forum=45

  • When i want to rent a movie i have to enter a passwo. which password should i use ?rd

    when i want to rent a movie i have to enter a passwo. which password should i use ?

    You rent via itunes so your itunes password.
    Regards
    jules

Maybe you are looking for