RFR [9] Remove sun.misc.Queue and replace usages with standard Collections
Chris Hegarty
chris.hegarty at oracle.com
Sun Dec 13 21:38:57 UTC 2015
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,
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.
> 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