0
点赞
收藏
分享

微信扫一扫

创建线程的三种方式

寒羽鹿 2022-02-13 阅读 157

1.继承Thread类

public class MyThread extends Thread{

    @Override
    public void run() {
        for(int i=0;i<10;i++){
            System.out.println("锄禾日当午"+i);
        }
    }
}
public static void main(String[] args){
MyThread m=new MyThread();
       m.start();
}

2.实现Runnable接口

public class MyRunable implements Runnable{

    @Override
    public void run() {
        for (int i=0;i<10;i++){
            System.out.println("一二三四五"+i);
        }

    }
}
public static void main(String[] args){
MyRunable myRunable=new MyRunable();
        Thread t=new Thread(myRunable);
        t.start();
}

3.实现Callable接口

package fangfa1;
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;

/**
 * @Description: TODO(这里用一句话描述这个类的作用)
 * @Author admin
 * @Date 2022/2/13 13:43
 */
public class Demo5 {
    public static void main(String[] args) {
        Call call = new Call();
        FutureTask<Integer> futureTask=new FutureTask<>(call);
        new Thread(futureTask).start();
        for(int i=0;i<100;i++){
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(i);
        }
    }
    static class Call implements Callable<Integer> {


        @Override
        public Integer call() throws Exception {
            for(int i=0;i<100;i++){
                Thread.sleep(1000);
                System.out.println(i);
            }
            return 100;
        }
    }
}

注意:面试时会问到第三种创建方式(但是平常极少用)

Runnable与Callable的相同点

(1)都是接口

(2)都可以编写多线程程序

(3)都采用Thread.start()启动线程

Runnable与Callable的不同点

(1)Ruunnable没有返回值,Callable可以返回执行结果(需要调用FutureTask.get()得到,此方法会阻塞主进程的继续往下执行,如果不调用不会阻塞)

(2)Callbale中的call()允许抛出异常,Runnable中的run()不允许

举报

相关推荐

0 条评论