java 线程创建的三种方式

线程创建的三种方式

引言

从大学开始学习java也有很长的时间了,从java基础,到现在SpringBoot,SpringCloud的学习感觉像是经过了很久,也想把以前学习的笔记整理一下更深入的去了解学习。本人会陆续的发布一些java基础知识同正在这条路上的码友共同进步,共同学习。

Thread

Thead类也是我今天要写的三种实现线程的方式之一 。通过继承Thread类来实现Thread类中的run()方法来实现一个线程的创建。了解过一部分源码的人应该知道Thead这个类实现了Runnable接口实现run方法,执行了start0方法。这个方法使用native来进行修饰的(native关键字修饰的方法是原生态方法,他的实现是通过c或c++来实现的),废话不多说码上。

 public class MyThread extends Thread{


    public static void main(String[] args) {

        MyThread myThread = new MyThread();
        //启动一个线程
        myThread.start();
    }

    //重写run方法
    @Override
    public void run() {

        for (int i = 0; i < 10; i++) {
            System.out.println("i= "+i);
        }

    }
}

Runnable

通过implements关键字实现Runnable接口,重写Run方法来实现一个线程的创建。码上

public class MyThreadTwo implements Runnable{

    public static void main(String[] args) {

        //创建线程
        Thread thread = new MyThread();
        thread.setName("thread02");

        //创建线程
        MyThreadTwo myThreadTwo = new MyThreadTwo();
        Thread thread1 = new Thread(myThreadTwo);
        thread1.setName("thread01");

        //设置线程的优先级
        thread1.setPriority(3);
        //启动线程
        thread1.start();
        thread.start();

    }

    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(Thread.currentThread().getName()+" i= "+i);
        }
    }
}

Callable

通过实现Callable接口,并实现call方法创建线程。

  1. 实现Callable接口 重写call 方法。 这里的call方法区别于run方法的地方是有一个处理结果的返回值。
    2.使用FatureTask接收所实现的Callable的实现类。这里的FatureTask实现了RunnabeFuture接口,而RunnableFuture接口继承了Future和Runnable接口。感兴趣的了解一下源码。
  2. 创建Thread类,启动线程
public class MyThreadThree implements Callable {

    public static void main(String[] args) throws Exception {

        MyThreadThree myThreadThree = new MyThreadThree();
        FutureTask futureTask = new FutureTask(myThreadThree);
        // 创建线程
        Thread thread = new Thread(futureTask);
        int count = (int) myThreadThree.call();
        System.out.println(count);
        thread.start();

    }

    @Override
    public Object call() throws Exception {

        int count = 0;

        for (int i = 0; i < 10; i++) {
            count +=i;
           // System.out.println(count);
        }

        return count;
    }
}

总结

三种创建方式的总结
1.通过继承Thread直接创建线程比较方便简洁。不利于其扩展性(不推荐使用继承Thread的方式来创建线程)。
2.通过实现Runnable和Callable接口来创建线程不妨碍其直接继承其他的类(java单继承)
3.Callable接口的call方法的结果返回值。区别于run方法,这里可以看实际需求来进行使用。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值