In this post, I am going to explain how to call a method asynchronously.
Approach 1: Using threads
Example
new Thread(() -> {
// Method to execute
Printer.sayHello(2);
}).start();
Find the below working application.
Printer.java
package com.sample.app.threads;
public class Printer {
public static void sayHello(int sleepInSeconds) {
while(true) {
SleepUtil.sleepForNSeconds(sleepInSeconds);
System.out.println("Hello!!!!!");
}
}
}
SleepUtil.java
package com.sample.app.threads;
import java.util.concurrent.TimeUnit;
public class SleepUtil {
public static void sleepForNSeconds(int secondsToSleep) {
try {
TimeUnit.SECONDS.sleep(secondsToSleep);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
AsyncExecOfMethodUsingThreads.java
package com.sample.app.threads;
public class AsyncExecOfMethodUsingThreads {
public static void main(String args[]) {
new Thread(() -> {
Printer.sayHello(2);
}).start();
while (true) {
SleepUtil.sleepForNSeconds(2);
System.out.println("Hi!!!");
}
}
}
Sample Output
Hi!!! Hello!!!!! Hello!!!!! Hi!!! Hello!!!!! Hi!!! Hello!!!!! Hi!!! Hi!!! Hello!!!!!
Approach 2: Using CompletableFuture.runAsync.
Example
CompletableFuture.runAsync(() -> {
// Method to execute asynchronously.
Printer.sayHello(2);
});
AsyncExecOfMethodUsingCompletableFeature.java
package com.sample.app.threads;
import java.util.concurrent.CompletableFuture;
public class AsyncExecOfMethodUsingCompletableFeature {
public static void main(String args[]) {
CompletableFuture.runAsync(() -> {
// Method to execute asynchronously.
Printer.sayHello(2);
});
while (true) {
SleepUtil.sleepForNSeconds(2);
System.out.println("Hi!!!");
}
}
}
Sample Output
Hi!!! Hello!!!!! Hi!!! Hello!!!!! Hi!!! Hello!!!!! Hi!!! Hello!!!!! Hi!!! Hello!!!!!
Approach 3: Using ForkJoinPool.commonPool().execute() method
Example
ForkJoinPool.commonPool().execute(() -> {
// Method to execute asynchronously.
Printer.sayHello(2);
});
AsyncExecOfMethodUsingForkJoinPool.java
package com.sample.app.threads;
import java.util.concurrent.ForkJoinPool;
public class AsyncExecOfMethodUsingForkJoinPool {
public static void main(String args[]) {
ForkJoinPool.commonPool().execute(() -> {
// Method to execute asynchronously.
Printer.sayHello(2);
});
while (true) {
SleepUtil.sleepForNSeconds(2);
System.out.println("Hi!!!");
}
}
}
Approach 4: Using Executors.newSingleThreadExecutor().submit()
Executors.newSingleThreadExecutor().submit(() -> {
// Method to execute asynchronously.
Printer.sayHello(2);
});
AsyncExecOfMethodUsingSingleThreadExecutor.java
package com.sample.app.threads;
import java.util.concurrent.Executors;
public class AsyncExecOfMethodUsingSingleThreadExecutor {
public static void main(String args[]) {
Executors.newSingleThreadExecutor().submit(() -> {
// Method to execute asynchronously.
Printer.sayHello(2);
});
while (true) {
SleepUtil.sleepForNSeconds(2);
System.out.println("Hi!!!");
}
}
}
Approach 5: Using thread pool.
Example
ExecutorService asyncExecutor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
asyncExecutor.execute(() -> {
// Method to execute asynchronously.
Printer.sayHello(2);
});
AsyncExecOfMethodUsingThreadPool.java
package com.sample.app.threads;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class AsyncExecOfMethodUsingThreadPool {
public static void main(String args[]) {
ExecutorService asyncExecutor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
asyncExecutor.execute(() -> {
// Method to execute asynchronously.
Printer.sayHello(2);
});
while (true) {
SleepUtil.sleepForNSeconds(2);
System.out.println("Hi!!!");
}
}
}
You may like
Understanding ConcurrentModificationException in Java
Remove oldest entry from the map
No comments:
Post a Comment