我们先来看段示例代码
Impor java.util.concurrent.callable; import java.util.concurrent.futuretask; kelas publik utama {public static void main (string [] args) {// 方法一 : : 继承 继承 {{继承 继承 继承 {{i. ); // if (i == 5) {// threadextendsthread threadextendsthread = new threadextendSthread (); // threadextendsthread.start (); //} //} // 方法二 : : {{/实现 {/实现 {/{实现 {/{实现 {{/{实现 for (i = 0; ); // if (i == 5) {// runnable runnable = new threadImplementsrunnable (); // thread baru (runnable) .start (); // thread baru (runnable) .start (); //} //} // 方法三 : : 实现 : : : : : 方法三 方法三 方法三 方法三 方法三 方法三. Futuretask <Integer> futuretask = futuretask baru <> (dapat dipanggil); untuk (i = 0; i <100; i ++) {System.out.println (thread.currentThread (). getName () + "" + i); if (i == 5) {utas baru (futureTask) .start (); utas baru (futuretask) .start (); }} coba {System.out.println ("Futuretask Ruturn:" + futureTask.get ()); } catch (Exception e) {E.PrintStackTrace (); }}}接下来我们来详细探讨下 Java 实现多线程的几种方式
方法一 , utas
Public Class ThreadextendSthread memperluas Thread {private int i; @Override public void run () {for (; i <100; i ++) {System.out.println (getName () + "" + i); }}}Jalankan 方法为线程执行体 , ThreadextendsThread 对象即为线程对象。
方法二 , 实现 runnable 接口
Public Class ThreadImplementsRunnable mengimplementasikan Runnable {private int i; @Override public void run () {for (; i <100; i ++) {System.out.println (thread.currentThread (). GetName () + "" + i); }}}Jalankan 方法为线程执行体 , 使用时 一个 一个 , , , , runnable 对象作为 target 传递给 baru 对象。且同一个 runnable 对象可作为多个 thread 的 target , 这些线程均 共 runnable 对象的实例变量。
方法三 , 实现 Callable 接口
Impor java.util.concurrent.callable; Public Class ThreadImplementScallable mengimplementasikan Callable <Integer> {private int i; @Override Public Integer Call () melempar Exception {for (; i <100; i ++) {System.out.println (thread.currentThread (). GetName () + "" + i); } return i; }}Callable 接口类似于 runnable 接口 , 但比对方强大 , 线程执行体为 hubungi 方法 , 该方法具有返回值和可抛出异常。使用时将 Callable 对象包装为 Futuretask 对象 , 通过泛型指定返回值类型。可稍候调用 Futuretask 的 Dapatkan 方法取回执行结果。