> 生活笔记  > python
java多线程学习笔记-1

java中有三种方法创建线程

①继承Thread类

②实现Runnable接口

③使用Callable和Future创建线程

我们分别看一下这三种方式是如何创建线程的

1.通过继承Thread类

(1)定义Thread类的子类,并重写run方法,该run方法的方法体就代表了线程需要完成的任务。

(2)创建Thread子类的实例,即创建了线程对象。

(3)调用线程对象的start方法来启动该线程。

示例

//通过继承Thread类来创建线程类
public class FirstThread extends Thread{
    public void run(){
        //...相关代码
    }
    public static void main(String[] args){
        //创建并启动第一个线程
        new FirstThread().start();
        //创建并启动第二个线程
        new FirstThread().start();
    }
}

2.实现Runnable接口

(1)定义Runnable接口的实现类,并重写run方法。

(2)创建实现类的实例,并以此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象

//创建Runnable实现类的对象
SecondThread st = new SecondThread();
//以Runnable实现类的对象作为target来创建Thread对象,即线程对象
new Thread(st);

(3)调用start方法来启动该线程

3.使用Callable和Future创建

  从Java5开始,Java提供了Callable接口,Callable接口提供了一个call方法可以作为线程执行体,但call方法功能更加强大--call方法可以有返回值,call方法可以声明抛出异常。

  Callable接口不是Runnable的子接口,所以Callable对象不能直接作为Thread的target,而且call方法还有一个返回值--所以call方法并不是直接调用,它是作为线程执行体被调用的,Java5提供了Future接口来代表Callable接口里的返回值,并为Future接口提供了一个FutureTask实现类,该实现类实现了Future接口,赢实现了Runnable接口,所以可以作为Thread类的target。

创建并启动有返回值的线程的步骤:

(1)创建Callable接口的实现类,并实现call方法。

(2)创建Callable实现类的实例,使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call方法的返回值。

(3)使用FutureTask对象作为Thread对象的target创建并启动新线程。

(4)调用FutureT按贷款对象的get方法来获得子线程执行结束后的返回值。

//实现Callable接口来实现线程类
public class ThirdThread implements Callable{
    //实现call方法,作为线程执行体
    public Integer call(){
        int i = 0;
        for(; i < 100; i++){
            System.out.println(Thread.currentThread().getName()+"的循环变量i的值"+i);
            //call方法可以有返回值
            return i;
        }
    }
    public static void main(String[] args){
        //创建Callable对象
        ThirdThread rt = new ThirdThread();
        //使用FutureTask来包装Callable对象
        FutureTask task = new FutureTask(rt);
        new Thread(task,"有返回值的线程").start();
        try{
            //获取线程返回值
            System.out.println("子线程的返回值:" + task.get());
        }catch(Exception ex){
            ex.printStackTrace();
        }
    }
}

以上便是创建线程的三种方法,一般推荐采用实现Runnable接口丶Callable接口的方式来创建多线程。

0条评论
猜你喜欢
精品推荐
扫二维码,加好友一起学习吧!