我们先来看段示例代码
importar java.util.Concurrent.Callable; importar java.util.concurrent.futureTask; public class Main {public static void main (string [] args) {// 方法一 : : 继承 thread Int i = 0; para (; i <100; i ++) {// System.out.PrinNnnnnnnnnnN ("; i); // if (i == 5) {// threadExndthRead threadExtendsThread = new ThreadExtthRead (); // threadExtendsthread.start (); //} //} // 方法二 方法二 : 实现 runnable // para (i = 0; i <100; i ++) {// system.out.out.PrinNnnnnnnnN (i = 0; i +; i); // if (i == 5) {// runnable runnable = new threadImplementsRunnable (); // new Thread (runnable) .start (); // new Thread (runnable) .start (); //} //} // 方法三 实现 chamadas de callAll (Integle> callable> 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 (); novo thread (futureTask) .start (); }} tente {System.out.println ("FutureTask Ruturn:" + FutureTask.get ()); } catch (Exceção e) {e.printStackTrace (); }}}接下来我们来详细探讨下 Java 实现多线程的几种方式
方法一 , thread
classe pública threadExtendsThread estende thread {private int i; @Override public void run () {for (; i <100; i ++) {System.out.println (getName () + "" + i); }}}Run 方法为线程执行体 , ThreadExtendSthread 对象即为线程对象。
方法二 , 实现 Runnable 接口
classe pública threadimplementsRunnable implementa runnable {private int i; @Override public void run () {for (; i <100; i ++) {System.out.println (thread.currentThread (). GetName () + "" + i); }}}Execute 方法为线程执行体 , 使用时 novo 一个 Trepa 对象 , Runnable 对象作为 Alvo 传递给 Trema 对象。且同一个 Runnable 对象可作为多个 Trepa 的 Alvo , 这些线程均 共 享 Runnable 对象的实例变量。
方法三 , 实现 Callable 接口
importar java.util.Concurrent.Callable; public class Threadimplements Iplemmlelable Callable <Integer> {private int i; @Override public Integer Call () lança exceção {for (; i <100; i ++) {System.out.println (thread.currentThread (). GetName () + "" + i); } retornar i; }}Chamável 接口类似于 executável 接口 , 但比对方强大 , 线程执行体为 ligue para 方法 , 该方法具有返回值和可抛出异常。使用时将 chamável 对象包装为 futureTask 对象 , 通过泛型指定返回值类型。可稍候调用 futureTask 的 Obtenha 方法取回执行结果。