参考网址:http://blog.csdn.net/xyw591238/article/details/51900325
目录结构如下:
CallableMethod类
/** * */ package test; import java.util.concurrent.Callable; /** * @author lei_chunhui * @date 2018年2月1日 下午8:42:05 */ /** * @author leichunhui * * 2018年2月1日 */ public class CallableMethod implements Callable<String> { @Override public String call() throws Exception { System.out.println("callable方式创建线程"); return null; } }
RunnableMethod类:
/** * */ package test; /** * @author lei_chunhui * @date 2018年2月1日 下午8:27:12 */ /** * @author leichunhui * * 2018年2月1日 */ public class RunnableMethod implements Runnable { @Override public void run() { System.out.println("runnable方式创建线程"); } }
ThreadMethod类
/** * */ package test; /** * @author lei_chunhui * @date 2018年2月1日 下午8:54:03 */ /** * @author leichunhui * * 2018年2月1日 */ public class ThreadMethod extends Thread { public void run() { System.out.println("继承Thread方式创建线程"); } }
Test测试类
/** * */ package test; import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; /** * @author lei_chunhui * @date 2018年2月1日 下午8:29:56 */ /** * @author leichunhui * * 2018年2月1日 */ public class Test { /** * * 描述:TODO * 创建人:leichunhui * 创建时间:2018年2月1日 * 修改人:leichunhui * 修改时间:2018年2月1日 * 修改备注: * 方法名:main * 返回类型:void * @param args * @version * */ public static void main(String[] args) { // 重写runnable接口的run方法实现 System.out.println("Runnable方式创建线程开始"); RunnableMethod runnableMethod1=new RunnableMethod(); RunnableMethod runnableMethod2=new RunnableMethod(); Thread thread1=new Thread(runnableMethod1); Thread thread2=new Thread(runnableMethod2); thread1.start(); thread2.start(); System.out.println("thread1的线程名字为:"+thread1.getName()+"线程id为:"+thread1.getId()); System.out.println("thread2的线程名字为:"+thread2.getName()+"线程id为:"+thread2.getId()); System.out.println("Runnable方式创建线程结束"); System.out.println("Callable方式创建线程开始"); CallableMethod callableMethod3=new CallableMethod(); CallableMethod callableMethod4=new CallableMethod(); FutureTask<String> futureTask3=new FutureTask<>(callableMethod3); FutureTask<String> futureTask4=new FutureTask<>(callableMethod4); Thread thread3=new Thread(futureTask3); Thread thread4=new Thread(futureTask4); thread3.start(); thread4.start(); System.out.println("thread3的线程名字为:"+thread3.getName()+"线程id为:"+thread3.getId()); System.out.println("thread4的线程名字为:"+thread4.getName()+"线程id为:"+thread4.getId()); System.out.println("Callable方式创建线程结束"); System.out.println("Thread继承方式创建线程开始"); ThreadMethod thread5=new ThreadMethod(); ThreadMethod thread6=new ThreadMethod(); thread5.start(); thread6.start(); System.out.println("thread5的线程名字为:"+thread5.getName()+"线程id为:"+thread5.getId()); System.out.println("thread6的线程名字为:"+thread6.getName()+"线程id为:"+thread6.getId()); System.out.println("Thread继承方式创建线程结束"); } }
结果:
Runnable方式创建线程开始
runnable方式创建线程
thread1的线程名字为:Thread-0线程id为:10
thread2的线程名字为:Thread-1线程id为:11
Runnable方式创建线程结束
Callable方式创建线程开始
runnable方式创建线程
thread3的线程名字为:Thread-2线程id为:12
thread4的线程名字为:Thread-3线程id为:13
callable方式创建线程
callable方式创建线程
Callable方式创建线程结束
Thread继承方式创建线程开始
thread5的线程名字为:Thread-4线程id为:14
继承Thread方式创建线程
继承Thread方式创建线程
thread6的线程名字为:Thread-5线程id为:15
Thread继承方式创建线程结束