Java多线程

目录

Java的线程模型

线程的创建三种方式

三种方式的比较


Java的线程模型

  • Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例
  • 线程用于完成一定的任务(执行一段程序流), Java使用线程执行体来代表这段程序流
  • 线程的使用过程:定义线程体》创建线程对象》调用线程对象的方法以启动线程

创建线程对象只有一种方式,但定义线程执行体有多种方式

线程的创建方式

  1. 继承Thread类,重写run()方法
    1. 定义Thread类的子类,并重写该类的run()方法(线程体)

    2. 创建Thread类的子类的实例。即创建线程对象
    3. 调用线程对象的start()方法,即启动这个线程

  2. 实现Runnable接口,重写run()方法

    class Foo implements Runnable{
    	public void run(){
    		...
    	}
    }
    
    public static void main(String[] args){
    	new Thread(new Foo()).start();
    }
    1. 定义Runnable接口的实现类,并实现该接口的run()方法(线程体)。

    2. 创建Runnable实现类的实例,并以此作为target来创建Thread对象。

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

  3. 实现Callable接口(线程可以有返回值)

    class Foo implements Callable<String>{
    	public String call() throws Exception{
    		...
    	}
    }
    public static void main(String[] args){
    	FutureTask<String> task = new FutureTask<>(new Foo());
    	new Thread(task).start();
    	System.out.println(task.get());
    }
    1. 定义Callable接口的实现类,并实现该接口的cal1()方法(线程体,类似于Runnable中的run()方法);

    2. 创建Callable接口的实例,并使用Future接口来包装Callable对象,最后使用Future对象(线程的返回值)作为target来创建Thread对象

    3. 调用Thread对象的start()方法来启动线程;

    4. 调用Future对象的get()方法获取线程的返回值

三种方式的比较

继承父类的方式

  • -优点∶编程比较简单;
  • -缺点∶线程类已经继承了Thread类,所以不能再继承其他的父类;受限制了,让类丧失了灵活性

实现接口的方式

  • -优点∶线程类只实现了接口,还可以继承于其他的父类;可以更灵活
  • -缺点∶编程比较麻烦;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值