A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 王高飞 于 2019-6-5 17:01 编辑

1 继承Thread的方式
代码如下:
[Java] 纯文本查看 复制代码
public class MyThread extends Thread{//继承Thread类
     //重写run方法
  public void run(){
  }
}
public class Test{
  public static void main(String[] args){
    new MyThread().start();//创建并启动线程
  }
}
2 实现Runnable接口的方式
代码如下:
[Java] 纯文本查看 复制代码
public class MyThread2 implements Runnable {//实现Runnable接口
 //重写run方法
  public void run(){
  }
}
public class Test{
  public static void main(String[] args){
    //创建并启动线程
    MyThread2 myThread=new MyThread2();
    Thread thread=new Thread(myThread);
    thread().start();
  }
}
3 使用Callable和Future创建线程
代码如下:
[Java] 纯文本查看 复制代码
public class Test{
  public static void main(String[] args){
   MyThread3 th=new MyThread3();
   FutureTask<Integer> future=new FutureTask<Integer>(
    (Callable<Integer>)()->{
      return 10;
    }
    );
   new Thread(task,"线程1").start();//实质上还是以Callable对象来创建并启动线程
    try{
    System.out.println("返回值:"+future.get());//get方法会阻塞,直到子线程执行结束才返回
    }catch(Exception e){
    ex.printStackTrace();
   }
  }
}
三种方式的区别:
实现Runnable和实现Callable接口的方式道理相同,不过是call()方法有返回值,后者run()方法无返回值,因此可以把这两种方式归为一种这种方式并与继承Thread类的方法对比:
1、线程只是实现Runnable或实现Callable接口,还可以继承其他类。
2、多个线程可以共享一个target对象,非常适合多线程处理同一份资源的情形。
3、如果需要访问当前线程,必须调用Thread.currentThread()方法。
4、继承Thread类的线程类不能再继承其他父类,有局限性(Java单继承)。


4 个回复

正序浏览
数据结构干货  来自黑马程序员太原校区助教总结
回复 使用道具 举报
张志辉 来自手机 中级黑马 2019-6-5 17:22:52
板凳
[赞],点击[ http://pinyin.cn/e244613 ]查看表情
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马