我们先来看段示例代码
java.util.concurrent.callable; import java.util.concurrent.futuretask; public class main {public static void main(String [] args){//方法一方法一::继承int i = 0; // i); // if(i == 5){// threadextEndSthreadextEndSthSthRead = new shoodextEndSthRead(); // swerchextEndSthSthread.start(); //} //} // " + i); // if(i == 5){// runnable runnable = new threadimplementsRunable(); // new Thread(runnable).start(); // new Stread(runnable).start(); //} // 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();新しいスレッド(futureTask).start(); }} try {system.out.println( "futuretask ruturn:" + futuretask.get()); } catch(Exception e){e.printstacktrace(); }}}接下来我们来详细探讨下java实现多线程的几种方式
方法一、继承自スレッド
public class threadextendSthread extends thread {private int i; @Override public void run(){for(; i <100; i ++){system.out.println(getname() + "" + i); }}}run方法为线程执行体、threadextEndSthRead对象即为线程对象。
方法二、实现rurnable接口
public class threadimplementsrunnable runnable {private int i; @Override public void run(){for(; i <100; i ++){system.out.println(thread.currentthread()。getname() + "" + i); }}}run方法为线程执行体、使用时、使用时、新しい一个スレッド对象、実行可能对象作为ターゲット传递给スレッド对象。且同一个runnable对象可作为多个ターゲット、这些线程均cho享runnable对象的实例变量。
方法三、实现呼び出し可能な接口
Import java.util.concurrent.callable; public class threadimplementscallable Callable <integer> {private int i; @Override public Integer call()throws Exception {for(; i <100; i ++){system.out.println(thread.currentthread()。getName() + "" + i); } return i; }}callable接口类似于runnable接口、但比对方强大、线程执行体为コール方法、该方法具有返回值和可抛出异常。使用时将呼び出し可能な对象包装为futuretask对象、通过泛型指定返回值类型。可稍候调用futuretask