参考网址: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继承方式创建线程结束