我们先来看段示例代码
Импорт java.util.concurrent.callable; import java.util.concurrent.futureTask; открытый класс Main {public static void main (string [] args) {// 方法一 : : 继承 继承 int i = 0; // for (; i <100; i ++) {// system.out.println (thread.currentth i); // if (i == 5) {// ThreadExtendStread ThreadExtendSTHread = new ThreadExtendStHread (); // ThreadExtendStread.Start (); //} //} // 方法二 : 实现 Runnable // for (i = 0; i <100; i ++) {//system.out.println (i = 0; i <100; i ++) {//system.out.print. " + i); // if (i == 5) {// runnable runnable = new ThinkImplementsRunnable (); // new Thread (runnable) .start (); // new Thread (runnable) .start (); //} //} // 方法三 : 实现 Callable 接口 Callable <Integege> callable = new ThreadimplentsCallableCallable (););); FutureTask <Integer> futureTask = new FutureTask <> (Callible); for (i = 0; i <100; i ++) {System.out.println (thread.currentThread (). getName () + "" + i); if (i == 5) {new Thread (futureTask) .start (); новая ветка (FutureTask) .start (); }} try {System.out.println ("FutureTask Ruturn:" + futureTask.get ()); } catch (Exception e) {e.printstackTrace (); }}}接下来我们来详细探讨下 Java 实现多线程的几种方式
方法一 , 继承自 потока
публичный класс ThreadExtendSthread Extends Thread {private int i; @Override public void run () {for (; i <100; i ++) {System.out.println (getName () + "" + i); }}}запустить 方法为线程执行体 , threadextendsThread 对象即为线程对象。
方法二 , 实现 Runnable 接口
Общедоступный класс ThinkImplomemplomeSrunable реализует {private int i; @Override public void run () {for (; i <100; i ++) {System.out.println (thread.currentThread (). GetName () + "" + i); }}}Запустить 方法为线程执行体 , 使用时 Новый 一个 потока 对象 , Runnable 对象作为 Target 传递给 Thread 对象。且同一个 Runnable 对象可作为多个 Thread 的 Target , 这些线程均 共 享 Runnable 对象的实例变量。 对象的实例变量。
方法三 , 实现 Callable 接口
import java.util.concurrent.callable; public class ThinkImplementsBallable реализует Callable <Integer> {private int i; @Override public integer call () бросает исключение {for (; i <100; i ++) {System.out.println (thread.currentThread (). GetName () + "" + i); } return i; }}Callable 接口类似于 Runnable 接口 但比对方强大 但比对方强大 线程执行体为 线程执行体为 Call 方法 , 该方法具有返回值和可抛出异常。使用时将 Callable 对象包装为 FutureTask 对象 通过泛型指定返回值类型。可稍候调用 FutureTask 的 Получите 方法取回执行结果。 方法取回执行结果。 方法取回执行结果。