Collectives™ on Stack Overflow
Find centralized, trusted content and collaborate around the technologies you use most.
Learn more about Collectives
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
Learn more about Teams
–
Asynchronous implementation with JDK
1.8
:
public static void setTimeout(Runnable runnable, int delay){
new Thread(() -> {
try {
Thread.sleep(delay);
runnable.run();
catch (Exception e){
System.err.println(e);
}).start();
To call with lambda expression:
setTimeout(() -> System.out.println("test"), 1000);
Or with method reference:
setTimeout(anInstance::aMethod, 1000);
To deal with the current running thread only use a synchronous version:
public static void setTimeoutSync(Runnable runnable, int delay) {
try {
Thread.sleep(delay);
runnable.run();
catch (Exception e){
System.err.println(e);
Use this with caution in main thread – it will suspend everything after the call until timeout
expires and runnable
executes.
–
–
–
–
Use Java 9 CompletableFuture, every simple:
CompletableFuture.delayedExecutor(5, TimeUnit.SECONDS).execute(() -> {
// Your code here executes after 5 seconds!
–
–
The other answers assume you are not using Swing for your user interface (button).
If you are using Swing then do not use Thread.sleep()
as it will freeze your Swing application.
Instead you should use a javax.swing.Timer
.
See the Java tutorial How to Use Swing Timers and Lesson: Concurrency in Swing for more information and examples.
–
–
You can simply use Thread.sleep()
for this purpose. But if you are working in a multithreaded environment with a user interface, you would want to perform this in the separate thread to avoid the sleep to block the user interface.
Thread.sleep(60000);
// Then do something meaningful...
}catch(InterruptedException e){
e.printStackTrace();
Do not use Thread.sleep
as it will freeze your main thread, and not simulate setTimeout from JS.
You need to create and start a new background thread to run your code without stoping the execution of the main thread.
One example:
new Thread() {
@Override
public void run() {
try {
this.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
// your code here
}.start();
–
–
There is setTimeout()
method in underscore-java library.
Code example:
import com.github.underscore.Underscore;
import java.util.function.Supplier;
public class Main {
public static void main(String[] args) {
final Integer[] counter = new Integer[] {0};
Supplier<Void> incr =
() -> {
counter[0]++;
return null;
Underscore.setTimeout(incr, 0);
The function will be started in 100ms with a new thread.
–
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.