线程创建的常用方式

1、创建线程的常用方式:
注意: 线程之间是独立的,先后顺序由调度方法决定。
自定义类继承Thread类
自定义类实现Runnable接口
自定义类实现Callable接口
匿名内部类方式

继承方式:
1)java是单继承方式,继承Thread类之后不能继承其他类。
2)从操作上来分析:继承方式更简单,可以直接使用父类方法
3)继承方式不能多线程共享同一资源  (不能共享非静态资源) 。
实现方式:
1)java类可多实现接口,并且可以继承其他类,也可以实现其他接口
2)从操作上来分析:实现方式略复杂,获取当前线程得使用Thread.currentThread( ) 方法。
       3)实现方式 可以多线程共享同一资源。

不同点:
1、实现方式不同,继承和实现
2、Callable接口中是call方法且有返回值,并且此方法会抛出异常。

总结:使用实现Runnable接口的方式创建线程,可以避免java中的单继承问题,有利于程序的健壮性,代码可以被多个新城共享。通过实现Callable接口创建线程可以使用加入线程池,并且可以拿到一个Future对象,表示异步计算的结果。

2.方式详解:
自定义类继承Thread类
继承Thread类——> 重写run()方法;

class Processor1 extends Thread {
    public void run() {
        // do work
    }
}
//实例化线程
public static void main(String args[] ) {
   Processor p = new Processor1();
}

自定义类实现类实现Runnable接口
实现Runnable接口 ————> 实现接口中的run()方法

class Processor2 implements Runnable {
    @Override
    public void run() {
        //do work
    }
}
  //实例化线程
public static void main(String args[] ) {
    Processor2 p = new Processor();
    Thread t = new Thread(t);
}

匿名内部类实现

new Thread(new Runnable() {
    @override
    public void run() {
        //do something
    }
    }})

自定义类实现Callable接口---------------线程池中使用
实现Callable接口 ————> 重写接口中的call()方法
创建线程池,(Exexutors工具类提供的方法创建线程池)
创建Callable接口实现类的实例
将实例对象通过线程池的submit方法提交

class Processor3 implements Callable<Integer> {
    @Override
    public Integer call() throws Exception {
        System.out.println(Thread.currentThread().getName()); //获取当前线程名
        return null;
    }
}

public static void main(String args[]) {
    //实现 Callable 接口方式创建线程
    // 创建线程池
    ExecutorService executorService =Executors.newSingleThreadExecutor();
    Processor3 p3 = new Processor3();  //创建实例对象
    executorService.submit(p3);    // 提交给线程池(即运行此线程)
    executorService.shutdown();     //关闭线程池
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值