创建线程方法
方法一::继承Java.lang.Thread类,并覆盖run() 方法
ps:方法run( )称为线程体。
/**
* 线程入口点
*/
public void run() {
for(int i=0;i<20;i++) {
System.out.println("一边听歌");
}
}
public static void main(String[] args) {
// //创建子类对象
TestThread st = new TestThread();
//启动
st.start();//开启一个新的线程//由cpu调用,不一定立即执行
//st.run();//普通方法调用
for(int i=0;i<20;i++) {
System.out.println("一边学习");
}
}`
方法二:实现Java.lang.Runnable接口,并实现run() 方法
public class TestRunnable implements Runnable {
//线程入口点
public static run(){
for(int i=0;i<20;i++){
System.out.println("一边听歌");
}
}
public static void main(String[] args){
//创建实现类对象
TestRunnable tr = new TestRunnable();
//创建代理类对象(静态代理设计模式)
Thread hh = new Thread();
//启动线程
hh.start;
for(int i = 0;i<20;i++){
system.out.println("一边学习");
}
}
}
第三种方式:实现Callable接口
• 与实行Runnable相比, Callable功能更强大些
• 方法不同
可以有返回值,支持泛型的返回值
• 可以抛出异常
• 需要借助FutureTask,比如获取返回结果
• Future接口
• 可以对具体Runnable、Callable任务的执行结果进行取消、查询是否完成、获取结果等。
• FutrueTask是Futrue接口的唯一的实现类
• FutureTask 同时实现了Runnable, Future接口。它既可以作为Runnable被线程执行,又可以作为 Future得到Callable的返回值.