This article shares three ways to implement multi-threading in Java for your reference. The specific content is as follows
import java.util.concurrent.Callable;import java.util.concurrent.FutureTask;public class Main { public static void main(String[] args) { //Method 1: Inherit Thread int i = 0;// for(; i < 100; i++){// System.out.println(Thread.currentThread().getName() + " " + i);// if (i == 5) {// ThreadExtendsThread threadExtendsThread = new ThreadExtendsThread();// threadExtendsThread.start();// }// } // Method 2: Implement Runnable// for(i = 0; i < 100; i++){// System.out.println(Thread.currentThread().getName() + " " + i);// if (i == 5) {// Runnable runnable = new ThreadImplementsRunnable();// new Thread(runnable).start();// }// } //Method 3: Implement the Callable interface Callable<Integer> callable = new ThreadImplementsCallable(); FutureTask<Integer> futureTask = new FutureTask<>(callable); for(i = 0; i < 100; i++){ System.out.println(Thread.currentThread().getName() + " " + i); if (i == 5) { new Thread(futureTask).start(); new Thread(futureTask).start(); } } try { System.out.println("futureTask ruturn: " + futureTask.get()); } catch (Exception e) { e.printStackTrace(); } }} Method 1, inherit from Thread
public class ThreadExtendsThread extends Thread { private int i; @Override public void run() { for(; i < 100; i++) { System.out.println(getName() + " " + i); } }}The run method is the thread execution body, and the ThreadExtendsThread object is the thread object.
Method 2: Implement the Runnable interface
public class ThreadImplementsRunnable implements Runnable { private int i; @Override public void run() { for(; i < 100; i++){ System.out.println(Thread.currentThread().getName() + " " + i); } }}The run method is the thread execution body. When using it, a Thread object is New, and the Runnable object is passed to the Thread object as a target. And the same Runnable object can be used as a target for multiple Threads, and these threads share instance variables of the Runnable object.
Method 3: Implement the Callable interface
import java.util.concurrent.Callable;public class ThreadImplementsCallable implements Callable<Integer> { private int i; @Override public Integer call() throws Exception { for(; i < 100; i++){ System.out.println(Thread.currentThread().getName() + " " + i); } return i; }}The Callable interface is similar to the Runnable interface, but it is stronger than the other party. The thread execution body is a call method, which has a return value and can throw exceptions. When used, wrap the Callable object as a FutureTask object, specify the return value type through generics. You can call the get method of FutureTask to retrieve the execution result.
The above is all about this article, I hope it will be helpful to everyone's learning.