RFR [9] Remove sun.misc.Queue and replace usages with standard Collections

Paul Sandoz paul.sandoz at oracle.com
Mon Dec 14 09:45:30 UTC 2015


> On 13 Dec 2015, at 22:38, Chris Hegarty <chris.hegarty at oracle.com> wrote:
> 
> Thanks for looking at this Sergey.
> 
>> On 13 Dec 2015, at 11:16, Sergey Bylokhov <Sergey.Bylokhov at oracle.com> wrote:
>> 
>> Hi, Chris.
>> What is the reason to use assertion? If the problem is not theoretical,
> 

That was tricky to spot :-) nearly missed it.


> Hmm… The queue is “unbounded”, but actually has a capacity of
> Integer.MAX_VALUE. I suspect that this will never be reached, but
> I accept your comment.  Maybe add(E) is more appropriate? add()
> either succeeds, or fails with IllegalStateException.

Since the queue is not "capacity-restricted" i think add(E) is the more appropriate choice, as is the ISE in this context. It’s hard to imagine the applet event queue reaching the MAX_VALUE limit, if so it suggests there are other problems.

—

I suspect this use of queues in AppletPanel could be cleaned up given the usages of with synchronised blocks (and the sun.misc.Queue style is probably a hangover from the java.util.Vector days). Anyway, that’s for another day if the AWT devs want to take that on :-)

Paul.

> 
>> then probably OOM(or something like that) will be better?
> 
> I don’t think OOM is quite right. Maybe ISE, as above is better?
> 
> -Chris.
> 
> 
>> On 11/12/15 20:22, Chris Hegarty wrote:
>>> More technical debt in sun.misc…
>>> 
>>> Java SE has had support for Queues in Collections for many major releases,
>>> sun.misc.Queue seems to predate that. I cannot find any usages outside of the
>>> JDK, and just one in the JDK, AppletPanel. LinkedBlockingQueue appears to
>>> provide the necessary minimum functionality required by AppletPanel, FIFO
>>> blocking operations.
>>> 
>>> The changes are quite small so I just included the diffs inline.
>>> 
>>> Note: we could use either add(E) or offer(E) below, I don’t have a strong opinion
>>> either way.
>>> 
>>> $ hg rm src/java.base/share/classes/sun/misc/Queue.java
>>> 
>>> diff --git a/src/java.desktop/share/classes/sun/applet/AppletPanel.java b/src/java.desktop/share/classes/sun/applet/AppletPanel.java
>>> --- a/src/java.desktop/share/classes/sun/applet/AppletPanel.java
>>> +++ b/src/java.desktop/share/classes/sun/applet/AppletPanel.java
>>> @@ -38,6 +38,7 @@
>>> import java.security.*;
>>> import java.util.*;
>>> import java.util.Locale;
>>> +import java.util.concurrent.LinkedBlockingQueue;
>>> import sun.awt.AWTAccessor;
>>> import sun.awt.AppContext;
>>> import sun.awt.EmbeddedFrame;
>>> @@ -45,7 +46,6 @@
>>> import sun.misc.ManagedLocalsThread;
>>> import sun.misc.MessageUtils;
>>> import sun.misc.PerformanceLogger;
>>> -import sun.misc.Queue;
>>> import sun.security.util.SecurityConstants;
>>> 
>>> /**
>>> @@ -247,8 +247,7 @@
>>>     /**
>>>      * AppletEvent Queue
>>>      */
>>> -    private Queue<Integer> queue = null;
>>> -
>>> +    private LinkedBlockingQueue<Integer> queue = null;
>>> 
>>>     public synchronized void addAppletListener(AppletListener l) {
>>>         listeners = AppletEventMulticaster.add(listeners, l);
>>> @@ -276,10 +275,10 @@
>>>         synchronized(this) {
>>>             if (queue == null) {
>>>                 //System.out.println("SEND0= " + id);
>>> -                queue = new Queue<>();
>>> +                queue = new LinkedBlockingQueue<>();
>>>             }
>>> -            Integer eventId = Integer.valueOf(id);
>>> -            queue.enqueue(eventId);
>>> +            boolean inserted = queue.offer(id);
>>> +            assert inserted;
>>>             notifyAll();
>>>         }
>>>         if (id == APPLET_QUIT) {
>>> @@ -303,8 +302,8 @@
>>>         while (queue == null || queue.isEmpty()) {
>>>             wait();
>>>         }
>>> -        Integer eventId = queue.dequeue();
>>> -        return new AppletEvent(this, eventId.intValue(), null);
>>> +        int eventId = queue.take();
>>> +        return new AppletEvent(this, eventId, null);
>>>     }
>>> 
>>>     boolean emptyEventQueue() {
>>> 
>>> -Chris.
>>> 
>> 
>> 
>> --
>> Best regards, Sergey.
> 




More information about the core-libs-dev mailing list