我们先来看段示例代码
import java.util.concurrent.callable; import java.util.concurrent.futureTask; public class Main {public static void main (string [] args) {// 方法一 : : 继承 hilo int i = 0; // for (; i <100; i ++) {// system.ut.println (Thread.currentThead (). i); // if (i == 5) {// threiftextendsThread ThreadExtendSThread = new ThreadExtendShread (); // ThreadExtendSThread.start (); //} //} // 方法二 : : : 实现 runnable // for (i = 0; i <100; i ++) {// system.out.println (Thread.currentThead ().). i); // if (i == 5) {// runnable runnable = new ThreadImplementsRunnable (); // new Thread (runnable) .start (); // new Thread (runnable) .start (); //} //} // 方法三 : : : 实现 实现 llamable 接口 llamable <intento> callable = new ThreadMplementsCallable () (); FUTURETASK <Integer> FUTURETASK = new FutureTask <> (llamable); para (i = 0; i <100; i ++) {System.out.println (Thread.CurrentThread (). GetName () + "" + I); if (i == 5) {nuevo hilo (FutureTask) .Start (); nuevo hilo (FutUreTask) .Start (); }} try {System.out.println ("FutUreTask ruturn:" + futuretask.get ()); } catch (Exception e) {E.PrintStackTrace (); }}}接下来我们来详细探讨下 java 实现多线程的几种方式
方法一 继承自 继承自 hilo
public class ThreadExtendSthread extiende el hilo {private int i; @Override public void run () {for (; i <100; i ++) {system.out.println (getName () + "" + i); }}}Ejecutar 方法为线程执行体 方法为线程执行体 , threTextendSthread 对象即为线程对象。
方法二 实现 实现 runnable 接口
clase pública ThreadImplementsRunnable Implements runnable {private int i; @Override public void run () {for (; i <100; i ++) {System.out.println (Thread.CurrentThread (). GetName () + "" + i); }}}ejecutar 方法为线程执行体 , 使用时 nuevo 一个 hilo 对象 , runnable 对象作为 objetivo 传递给 hilo 对象。且同一个 runnable 对象可作为多个 hilo 的 objetivo 的 这些线程均 共 享 runnable 对象的实例变量。
方法三 , 实现 Callable 接口
import java.util.concurrent.callable; public class ThreadImplementScallable implementa Callable <Integer> {private int i; @Override public Integer Call () lanza la excepción {for (; i <100; i ++) {system.out.println (thread.currentThread (). GetName () + "" + i); } return i; }}Callable 接口类似于 Runnable 接口 , 但比对方强大 , 线程执行体为 Call 方法 , 该方法具有返回值和可抛出异常。使用时将 Callable 对象包装为 FUTURETASK 对象 , 通过泛型指定返回值类型。可稍候调用 FUTURETASK 的 Obtener 方法取回执行结果。