sclass QPool { replace Q with CompactQ. int max = numberOfCores(); new SelfNotifyingSet<Q> used; new SelfNotifyingSet<Q> free; synchronized int total() { ret l(used)+l(free); } synchronized bool nonFree() { ret empty(free) && max < total(); } event customerMustWaitAlert; void fireCustomerMustWaitAlert { vmBus_send customerMustWaitAlert(this, currentQ()); customerMustWaitAlert(); } synchronized WithAutoCloseable<Q> acquireQ() { if (nonFree()) fireCustomerMustWaitAlert(); if (total() < max) used.add(newQ()); sleepWhileEmpty(free); Q t = assertNotNull(popFirst(free)); used.add(t); ret withAutoCloseable(-> giveQBack(t), t); } synchronized void giveQBack(Q t) { used.remove(t); free.add(t); } static Q newQ() { ret new Q("Q Pool Inhabitant " + n2(total()+1)) { }; } }
Began life as a copy of #1033401
download show line numbers debug dex old transpilations
Travelled to 3 computer(s): bhatertpkbcr, mowyntqkapby, mqqgnosmbjvj
No comments. add comment
Snippet ID: | #1033405 |
Snippet name: | QPool [dev.] |
Eternal ID of this version: | #1033405/1 |
Text MD5: | ff103aa802d330a34b083b3de55a3252 |
Author: | stefan |
Category: | javax / code execution |
Type: | JavaX fragment (include) |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2021-10-27 04:45:06 |
Source code size: | 926 bytes / 39 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 136 / 151 |
Referenced in: | [show references] |