实现java的多线程操作(四)

实现java的多线程操作 —— 实现Callable接口

在java中,对于多线程实现一定要有一个线程的主类,而这个线程的主类往往是需要操作一些资源。但是对于这个多线程主类的实现是有一定要求的:
1.继承Thread父类;
2.实现Runnable接口(Callable接口)

1.1实现Callable接口
从JDK1.5之后对于多线程的实现多了一个Callable接口,从这个接口里面比Runnable接口唯一强大之处在他可以返回执行结果。此接口定在java.util.concurrent包中。

@FunctionalInterface
public interface Callable<V>{
    public V call() throws Exception{
        
    }
}

这个泛型表示的是返回值类型,call()方法就相当于run()方法。

范例:利用Callable定义一个线程的主体类

class MyThread implements Callable<String> {//表示实现多线程
    private int ticket = 5;
    @Override
    public String call() {//覆写call(),线程的主方法
        for(int i = 0;i < 10;i++){
            if(this.ticket >0){
                System.out.println("卖票,ticket = " + this.ticket--);
            }
        }
        return "票卖完了";
    }
}

但是现在出现了一个问题,Thread类中并没有提供接受Callable接口的对象操作,所以现在如何启动多线程就出现了问题。为了分析出启动的操作,需要来观察继承结构。
在这里插入图片描述

package day1;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

class MyThread implements Callable<String> {//表示实现多线程
    private int ticket = 5;
    @Override
    public String call() throws Exception{//覆写call(),线程的主方法
        for(int i = 0;i < 10;i++){
            if(this.ticket >0){
                System.out.println("卖票,ticket = " + this.ticket--);
            }
        }
        return "票卖完了";
    }
}
public class TestThreadDemo {
    public static void main(String[] args) throws Exception {
        Callable<String> call = new MyThread();//泛型接口实现吗,模式
        FutureTask<String> task = new FutureTask<>(call);//取得执行结果,并放在Thread类中
        Thread thread = new Thread(task);
        thread.start();
        System.out.println(task.get());//取得线程主方法返回值
    }
}
卖票,ticket = 5
卖票,ticket = 4
卖票,ticket = 3
卖票,ticket = 2
卖票,ticket = 1
票卖完了

1.2 总结

  1. Thread 有单继承局限所以不使用,但是所有的线程对象一定要通过Thread里中的star()方法启动;
  2. Runnable使用可以避免单继承局限,建议使用此操作;
  3. Callable比Runnable唯一的好处是多了返回值的数据
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值