创建线程的三种方法

来源:互联网 发布:网络娱乐性比实用性强 编辑:程序博客网 时间:2024/05/21 08:53

第一种 继承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;
}

}

0 0
原创粉丝点击