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