第一种 继承Thread类
class Test1 extends Thread{
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
}
}
第二种 实现Runnable接口
class Test1 implements Runnable{
@Override
public void run() {
}
}
第三种 实现Callable接口 有返回值
class Car implements Callable<T>{
@Override
public Integer call() throws Exception {
return null;
}
}
测试实例
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class CallableTest {
public static void main(String[] args) throws InterruptedException, ExecutionException {
//创建2个线程
ExecutorService pool = Executors.newFixedThreadPool(2);
String name = "千年王八";
String name2 = "嫦娥的兔子";
Car car = new Car(name,500);
Car car2 = new Car(name2,1000);
Future<Integer> submit = pool.submit(car);
Future<Integer> submit2 = pool.submit(car2);
Thread.sleep(5000);
//跳出Car类的whIle循环方法
car.setFlag(false);
car2.setFlag(false);
Integer wangba = submit.get();
Integer tuzi = submit2.get();
System.out.println(name+"跑了"+wangba+"步");
System.out.println(name2+"跑了"+tuzi+"步");
pool.shutdown();
}
}
class Car implements Callable<Integer>{
public Car(String name) {
super();
this.name = name;
}
public Car(String name,int time) {
super();
this.name = name;
this.time = time;
}
private String name; //名称
private long time = 0; //时间
private boolean flag = true; //用于停止
private int step = 0; //步
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public long getTime() {
return time;
}
public void setTime(long time) {
this.time = time;
}
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
@Override
public Integer call() throws Exception {
// TODO Auto-generated method stub
while(flag){
//休眠多少秒
Thread.sleep(time);
step++;
}
return step;
}
public int getStep() {
return step;
}
public void setStep(int step) {
this.step = step;
}
}