使用线程

使用线程

三种使用线程的方法:

  1. 实现Runnable接口
  2. 实现Callable接口
  3. 继承Thread类

​  实现Runnable和Callable接口的类只能当做一个可以在线程中运行的任务,不是真正意义上的线程,因此最后还是要通过调用Thread来调用,可以说任务是通过线程驱动从而执行的。

1.实现Runnable接口

  需要实现run()方法。

  通过Thread调用start()方法来启动线程。

public class MyRunnable implements Runnable{
    public void run(){
        //...
    }
    public static void main(String[]args){
        MyRunnable instance=new MyRunnable();
        Thread thread=new Thread(instance);
        thread.start();
    }
}

2.实现Callable接口

  与Runnable相比,Callable有返回值,返回值通过Futrue Task进行封装。

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
import java.java.util.concurrent.Thread;
public class CallableTest{
    public static void main(String[]args) throws ExecutionException,InterruptedException{
        MyCallable mc =new MyCallable();
        FutureTask<Integer>ft=new FutureTask<Integer>(mc);
        Thread thread=new Thread(ft);
        thread.start();
        System.out.print(ft.get());
    }
}
class MyCallable implements Callable {
    public Integer call(){
        return 123;
    }
}

3.继承Thread类

​  需要实现run()方法,因为Thread也实现了Runnable接口。

​  当调用start()方法启动一个线程时,虚拟机会将该线程放到就绪队列中等待被调度,当一个线程被调度的时候会执行该线程的run()方法。

public class MyThread extends Thread{
    public void run(){
        //...
    }
}
public static void main(String[]args){
    MyThread myThread=new MyThread();
    myThread.start();
}

实现接口VS继承Thread

实现接口更好一点:

​  1.java 不支持多重继承,因此继承了Thread就无法继承其他类,但是可以实现多个接口;

​  2.类可能只要求执行就好,如果继承的话开销太大。

posted @ 2019-04-11 11:30  yjxyy  阅读(171)  评论(0编辑  收藏  举报