我们先来看段示例代码
导入java.util.concurrent.callable; import java.util.concurrent.futuretask; public Class class main {public static void main(string [] args){//////////// // i); // if(i == 5){// threadextendSthreadSthreadSthreadSthRead = new threadextendSthRead(); // threadextendSthreadSthRead.start(); //} //} //} // for(i = 0; i = 0; i <100; i++) “ + i); // if(i == 5){// runnable runnable = new threadimplempleRunnable(); // new thread(runnable).start(); // new thread(runnable).start(runnable).start(); //}; //} //} //} //} //} ///////////////////////////- FutureTask <integer> futureTask = new FutureTask <>(可呼叫); 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(异常E){e.printstacktrace(); }}}}接下来我们来详细探讨下爪哇实现多线程的几种方式
方法一,继承自线
公共类ThreadExtendSthread扩展了线程{private int i; @Override public void run(){for(; i <100; i ++){system.out.println(getName() +“” + i); }}}}运行方法为线程执行体
方法二,实现可运行接口
公共类线程图像runnable实现可运行的{private int i; @Override public void run(){for(; i <100; i ++){system.out.println(thread.currentthread()。getName() +“” + i); }}}}运行方法为线程执行体,使用时新一个线程对象,可运行的对象作为目标传递给线程对象。且同一个可运行对象可作为多个线程的track,这些线程均共享
方法三,实现callable接口
导入java.util.concurrent.callable; public class threadimplementclable callable callable <integer> {private int i; @Override public Integer call()引发异常{for(; i <100; i ++){system.out.println(thread.currentthread()。getName()。getName() +“” + i); }返回i; }}}可呼叫接口类似于可运行接口,但比对方强大,线程执行体为,线程执行体为,该方法具有返回值和可抛出异常。使用时将,该方法具有返回值和可抛出异常。使用时将callable futureTask对象,通过泛型指定返回值类型。可稍候调用futuretask的