即日起在codingBlog上分享您的技术经验即可获得积分,积分可兑换现金哦。

java线程的创建与启动

编程语言 hjjdehao 11℃ 0评论
本文目录
[隐藏]

1.一、继承Thread类

public class MyThread extends Thread {
  private static volatile double d=1;

  @Override public void run() {
    while (d<10){
      d++;
    }
  }

  public static void main(String[] args){
    new MyThread ().start();
  }
}

2.二、实现Runnable接口

public class MyThread implements Runnable{
  private static volatile double d=1;

  @Override public void run() {
    while (d<10){
      d++;
    }
  }

  public static void main(String[] args){
     Thread thread = new Thread(new MyThread ());
    thread.start();
  }
}

前者直接创建Thread的子类即可代表线程对象;后者创建的Runnable对象只能作为线程对象的target。

3.三、Callable和Future创建线程

public class MyThread implements Callable<Integer>{
  private static volatile int d=1;
  @Override public Integer call() throws Exception {
    while (d<10){
         d++;
       }
    return d;
  }
  public static void main(String[] args){
    FutureTask futureTask = new FutureTask<>(new MyThread());
    try {
      //获取传回的结果
      System.out.print(futureTask.get());
    } catch (InterruptedException e) {
      e.printStackTrace();
    } catch (ExecutionException e) {
      e.printStackTrace();
    }
  }


实现Callable接口和实现Runnable接口没有太大的区别,只是Callable接口里定义的方法有返回值,允许声明抛出异常。

4.四、总结

      创建线程有继承Thread类、实现Runnable接口和Callable接口三种方式。对于实现Runnable接口或Callable接口实际上可以归为一类方式,只不过Callable接口可以有返回值,可以声明抛出异常。


其与Thread类的差异如下:


     线程类实现Runnable接口或Callable接口,还可以继承其他类,而继承Thread类则不行。


     继承Thread类的,不能共享线程对象的实例变量。实现Runnable接口或Callable接口的类型只是线程的target,而多个线程可以共享同一个线程类(实际上应该是线程的target类)的实例变量。


      继承Thread类的,可直接用this获取当前的线程对象。实现Runnable接口的要获取线程对象需Thread.currentThread()。


      综上所述,一般建议使用Runnable接口或Callable接口来创建多线程。

转载请注明:CodingBlog » java线程的创建与启动

喜欢 (0)or分享 (0)
发表我的评论
取消评论

*

表情