Is FileChannel.position() thread safe?
Is it safe to write from different threads to one file using FileChannel.position()
? This is necessary for multipart downloading. Each thread will write to its position in the file, i.e. the positions of the thread will not intersect.
java android filechannel
add a comment |
Is it safe to write from different threads to one file using FileChannel.position()
? This is necessary for multipart downloading. Each thread will write to its position in the file, i.e. the positions of the thread will not intersect.
java android filechannel
add a comment |
Is it safe to write from different threads to one file using FileChannel.position()
? This is necessary for multipart downloading. Each thread will write to its position in the file, i.e. the positions of the thread will not intersect.
java android filechannel
Is it safe to write from different threads to one file using FileChannel.position()
? This is necessary for multipart downloading. Each thread will write to its position in the file, i.e. the positions of the thread will not intersect.
java android filechannel
java android filechannel
asked Nov 18 '18 at 10:12
proninyaroslavproninyaroslav
60210
60210
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
While the individual option is thread safe, it's not thread local and changing it will be visible to all threads.
The simplest option is to create a FileChannel for each thread which avoid any interactions unless you write to the file in which case those changes can be seen.
Do I understand correctly that creating two different channels will allow me to safely move seek pointer for writing in the file? In other words, if the second thread moves seek pointer to the other position of the file, it will not be reflected in the first thread and first thread will continue to write data to the old position?
– proninyaroslav
Nov 18 '18 at 13:19
@proninyaroslav each FileChannel can point to a different position without interfering with each other. If each thread has it's own, they are only sharing the underlying file not the FileChannel.
– Peter Lawrey
Nov 18 '18 at 16:22
add a comment |
In the FileChannel
Documentation, it says:
File channels are safe for use by multiple concurrent threads.
While the individual operation is thread safe, it's value is not thread local.and using it with other operations will result in race conditions.
– Peter Lawrey
Nov 18 '18 at 12:42
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%2f53359760%2fis-filechannel-position-thread-safe%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
While the individual option is thread safe, it's not thread local and changing it will be visible to all threads.
The simplest option is to create a FileChannel for each thread which avoid any interactions unless you write to the file in which case those changes can be seen.
Do I understand correctly that creating two different channels will allow me to safely move seek pointer for writing in the file? In other words, if the second thread moves seek pointer to the other position of the file, it will not be reflected in the first thread and first thread will continue to write data to the old position?
– proninyaroslav
Nov 18 '18 at 13:19
@proninyaroslav each FileChannel can point to a different position without interfering with each other. If each thread has it's own, they are only sharing the underlying file not the FileChannel.
– Peter Lawrey
Nov 18 '18 at 16:22
add a comment |
While the individual option is thread safe, it's not thread local and changing it will be visible to all threads.
The simplest option is to create a FileChannel for each thread which avoid any interactions unless you write to the file in which case those changes can be seen.
Do I understand correctly that creating two different channels will allow me to safely move seek pointer for writing in the file? In other words, if the second thread moves seek pointer to the other position of the file, it will not be reflected in the first thread and first thread will continue to write data to the old position?
– proninyaroslav
Nov 18 '18 at 13:19
@proninyaroslav each FileChannel can point to a different position without interfering with each other. If each thread has it's own, they are only sharing the underlying file not the FileChannel.
– Peter Lawrey
Nov 18 '18 at 16:22
add a comment |
While the individual option is thread safe, it's not thread local and changing it will be visible to all threads.
The simplest option is to create a FileChannel for each thread which avoid any interactions unless you write to the file in which case those changes can be seen.
While the individual option is thread safe, it's not thread local and changing it will be visible to all threads.
The simplest option is to create a FileChannel for each thread which avoid any interactions unless you write to the file in which case those changes can be seen.
answered Nov 18 '18 at 12:44
Peter LawreyPeter Lawrey
444k56566967
444k56566967
Do I understand correctly that creating two different channels will allow me to safely move seek pointer for writing in the file? In other words, if the second thread moves seek pointer to the other position of the file, it will not be reflected in the first thread and first thread will continue to write data to the old position?
– proninyaroslav
Nov 18 '18 at 13:19
@proninyaroslav each FileChannel can point to a different position without interfering with each other. If each thread has it's own, they are only sharing the underlying file not the FileChannel.
– Peter Lawrey
Nov 18 '18 at 16:22
add a comment |
Do I understand correctly that creating two different channels will allow me to safely move seek pointer for writing in the file? In other words, if the second thread moves seek pointer to the other position of the file, it will not be reflected in the first thread and first thread will continue to write data to the old position?
– proninyaroslav
Nov 18 '18 at 13:19
@proninyaroslav each FileChannel can point to a different position without interfering with each other. If each thread has it's own, they are only sharing the underlying file not the FileChannel.
– Peter Lawrey
Nov 18 '18 at 16:22
Do I understand correctly that creating two different channels will allow me to safely move seek pointer for writing in the file? In other words, if the second thread moves seek pointer to the other position of the file, it will not be reflected in the first thread and first thread will continue to write data to the old position?
– proninyaroslav
Nov 18 '18 at 13:19
Do I understand correctly that creating two different channels will allow me to safely move seek pointer for writing in the file? In other words, if the second thread moves seek pointer to the other position of the file, it will not be reflected in the first thread and first thread will continue to write data to the old position?
– proninyaroslav
Nov 18 '18 at 13:19
@proninyaroslav each FileChannel can point to a different position without interfering with each other. If each thread has it's own, they are only sharing the underlying file not the FileChannel.
– Peter Lawrey
Nov 18 '18 at 16:22
@proninyaroslav each FileChannel can point to a different position without interfering with each other. If each thread has it's own, they are only sharing the underlying file not the FileChannel.
– Peter Lawrey
Nov 18 '18 at 16:22
add a comment |
In the FileChannel
Documentation, it says:
File channels are safe for use by multiple concurrent threads.
While the individual operation is thread safe, it's value is not thread local.and using it with other operations will result in race conditions.
– Peter Lawrey
Nov 18 '18 at 12:42
add a comment |
In the FileChannel
Documentation, it says:
File channels are safe for use by multiple concurrent threads.
While the individual operation is thread safe, it's value is not thread local.and using it with other operations will result in race conditions.
– Peter Lawrey
Nov 18 '18 at 12:42
add a comment |
In the FileChannel
Documentation, it says:
File channels are safe for use by multiple concurrent threads.
In the FileChannel
Documentation, it says:
File channels are safe for use by multiple concurrent threads.
answered Nov 18 '18 at 10:25
vollkorntomatevollkorntomate
3125
3125
While the individual operation is thread safe, it's value is not thread local.and using it with other operations will result in race conditions.
– Peter Lawrey
Nov 18 '18 at 12:42
add a comment |
While the individual operation is thread safe, it's value is not thread local.and using it with other operations will result in race conditions.
– Peter Lawrey
Nov 18 '18 at 12:42
While the individual operation is thread safe, it's value is not thread local.and using it with other operations will result in race conditions.
– Peter Lawrey
Nov 18 '18 at 12:42
While the individual operation is thread safe, it's value is not thread local.and using it with other operations will result in race conditions.
– Peter Lawrey
Nov 18 '18 at 12:42
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%2f53359760%2fis-filechannel-position-thread-safe%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