CompletableFuture simplified custom example
Could someone explain the original source of CompletableFuture in simple ways? Particularly what happens in timedGet(long nanos)? This is source code link https://github.com/frohoff/jdk8u-jdk/blob/master/src/share/classes/java/util/concurrent/CompletableFuture.java
How CompletableFuture watches an execution of a thread and times out?
java java.util.concurrent
add a comment |
Could someone explain the original source of CompletableFuture in simple ways? Particularly what happens in timedGet(long nanos)? This is source code link https://github.com/frohoff/jdk8u-jdk/blob/master/src/share/classes/java/util/concurrent/CompletableFuture.java
How CompletableFuture watches an execution of a thread and times out?
java java.util.concurrent
1
That is a line majority restrict themselves into. Certain things demand to cross that line and check out things for many other reasons.
– J J
Nov 23 '18 at 9:25
add a comment |
Could someone explain the original source of CompletableFuture in simple ways? Particularly what happens in timedGet(long nanos)? This is source code link https://github.com/frohoff/jdk8u-jdk/blob/master/src/share/classes/java/util/concurrent/CompletableFuture.java
How CompletableFuture watches an execution of a thread and times out?
java java.util.concurrent
Could someone explain the original source of CompletableFuture in simple ways? Particularly what happens in timedGet(long nanos)? This is source code link https://github.com/frohoff/jdk8u-jdk/blob/master/src/share/classes/java/util/concurrent/CompletableFuture.java
How CompletableFuture watches an execution of a thread and times out?
java java.util.concurrent
java java.util.concurrent
asked Nov 23 '18 at 9:04
J JJ J
74
74
1
That is a line majority restrict themselves into. Certain things demand to cross that line and check out things for many other reasons.
– J J
Nov 23 '18 at 9:25
add a comment |
1
That is a line majority restrict themselves into. Certain things demand to cross that line and check out things for many other reasons.
– J J
Nov 23 '18 at 9:25
1
1
That is a line majority restrict themselves into. Certain things demand to cross that line and check out things for many other reasons.
– J J
Nov 23 '18 at 9:25
That is a line majority restrict themselves into. Certain things demand to cross that line and check out things for many other reasons.
– J J
Nov 23 '18 at 9:25
add a comment |
1 Answer
1
active
oldest
votes
I won't take upon myself to explain the entire CompletableFuture, as it's about 2K lines long, but I cad definitely explain timedGet()
Note that we're discussing OpenJDK here, OracleJDK is a bit different.
There are some checks before the meaty part and some cleanups after. I'll leave them.
long d = System.nanoTime() + nanos;
// Arguments are interruptible, nanos, deadline
Signaller q = new Signaller(true, nanos, d == 0L ? 1L : d); // avoid 0
boolean queued = false;
// We wait until we get the result
// If it's already there, we simply return it
while ((r = result) == null) {
// So, the result is not there
// If it's the first time we run this loop, or we didn't manage to push signaller on the stacked queued=false
if (!queued)
queued = tryPushStack(q);
// Something interrupted us. It could be either thread interrupt or timeout
else if (q.interruptControl < 0 || q.nanos <= 0L) {
q.thread = null;
cleanStack();
if (q.interruptControl < 0)
return null;
throw new TimeoutException();
}
else if (q.thread != null && result == null) {
try {
// Waits for q, without blocking the thread
ForkJoinPool.managedBlock(q);
} catch (InterruptedException ie) {
q.interruptControl = -1;
}
}
}
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53443520%2fcompletablefuture-simplified-custom-example%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
I won't take upon myself to explain the entire CompletableFuture, as it's about 2K lines long, but I cad definitely explain timedGet()
Note that we're discussing OpenJDK here, OracleJDK is a bit different.
There are some checks before the meaty part and some cleanups after. I'll leave them.
long d = System.nanoTime() + nanos;
// Arguments are interruptible, nanos, deadline
Signaller q = new Signaller(true, nanos, d == 0L ? 1L : d); // avoid 0
boolean queued = false;
// We wait until we get the result
// If it's already there, we simply return it
while ((r = result) == null) {
// So, the result is not there
// If it's the first time we run this loop, or we didn't manage to push signaller on the stacked queued=false
if (!queued)
queued = tryPushStack(q);
// Something interrupted us. It could be either thread interrupt or timeout
else if (q.interruptControl < 0 || q.nanos <= 0L) {
q.thread = null;
cleanStack();
if (q.interruptControl < 0)
return null;
throw new TimeoutException();
}
else if (q.thread != null && result == null) {
try {
// Waits for q, without blocking the thread
ForkJoinPool.managedBlock(q);
} catch (InterruptedException ie) {
q.interruptControl = -1;
}
}
}
add a comment |
I won't take upon myself to explain the entire CompletableFuture, as it's about 2K lines long, but I cad definitely explain timedGet()
Note that we're discussing OpenJDK here, OracleJDK is a bit different.
There are some checks before the meaty part and some cleanups after. I'll leave them.
long d = System.nanoTime() + nanos;
// Arguments are interruptible, nanos, deadline
Signaller q = new Signaller(true, nanos, d == 0L ? 1L : d); // avoid 0
boolean queued = false;
// We wait until we get the result
// If it's already there, we simply return it
while ((r = result) == null) {
// So, the result is not there
// If it's the first time we run this loop, or we didn't manage to push signaller on the stacked queued=false
if (!queued)
queued = tryPushStack(q);
// Something interrupted us. It could be either thread interrupt or timeout
else if (q.interruptControl < 0 || q.nanos <= 0L) {
q.thread = null;
cleanStack();
if (q.interruptControl < 0)
return null;
throw new TimeoutException();
}
else if (q.thread != null && result == null) {
try {
// Waits for q, without blocking the thread
ForkJoinPool.managedBlock(q);
} catch (InterruptedException ie) {
q.interruptControl = -1;
}
}
}
add a comment |
I won't take upon myself to explain the entire CompletableFuture, as it's about 2K lines long, but I cad definitely explain timedGet()
Note that we're discussing OpenJDK here, OracleJDK is a bit different.
There are some checks before the meaty part and some cleanups after. I'll leave them.
long d = System.nanoTime() + nanos;
// Arguments are interruptible, nanos, deadline
Signaller q = new Signaller(true, nanos, d == 0L ? 1L : d); // avoid 0
boolean queued = false;
// We wait until we get the result
// If it's already there, we simply return it
while ((r = result) == null) {
// So, the result is not there
// If it's the first time we run this loop, or we didn't manage to push signaller on the stacked queued=false
if (!queued)
queued = tryPushStack(q);
// Something interrupted us. It could be either thread interrupt or timeout
else if (q.interruptControl < 0 || q.nanos <= 0L) {
q.thread = null;
cleanStack();
if (q.interruptControl < 0)
return null;
throw new TimeoutException();
}
else if (q.thread != null && result == null) {
try {
// Waits for q, without blocking the thread
ForkJoinPool.managedBlock(q);
} catch (InterruptedException ie) {
q.interruptControl = -1;
}
}
}
I won't take upon myself to explain the entire CompletableFuture, as it's about 2K lines long, but I cad definitely explain timedGet()
Note that we're discussing OpenJDK here, OracleJDK is a bit different.
There are some checks before the meaty part and some cleanups after. I'll leave them.
long d = System.nanoTime() + nanos;
// Arguments are interruptible, nanos, deadline
Signaller q = new Signaller(true, nanos, d == 0L ? 1L : d); // avoid 0
boolean queued = false;
// We wait until we get the result
// If it's already there, we simply return it
while ((r = result) == null) {
// So, the result is not there
// If it's the first time we run this loop, or we didn't manage to push signaller on the stacked queued=false
if (!queued)
queued = tryPushStack(q);
// Something interrupted us. It could be either thread interrupt or timeout
else if (q.interruptControl < 0 || q.nanos <= 0L) {
q.thread = null;
cleanStack();
if (q.interruptControl < 0)
return null;
throw new TimeoutException();
}
else if (q.thread != null && result == null) {
try {
// Waits for q, without blocking the thread
ForkJoinPool.managedBlock(q);
} catch (InterruptedException ie) {
q.interruptControl = -1;
}
}
}
answered Nov 23 '18 at 10:03
Alexey SoshinAlexey Soshin
6,8051512
6,8051512
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53443520%2fcompletablefuture-simplified-custom-example%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
That is a line majority restrict themselves into. Certain things demand to cross that line and check out things for many other reasons.
– J J
Nov 23 '18 at 9:25