java多线程实现方法

Java原生支持多线程,主要通过以下四种方式实现多线程:

  1. 继承Thread类
  2. 实现Runnable接口
  3. 实现Callable接口
  4. 线程池

继承Thread类

通过创建Thread类的子类,并重写run()方法,通过调用start()方法启动线程。

public class TestThread extends Thread {
    @Override
    public void run() {
        //run方法线程体
        for (int i = 0; i < 10; i++) {
            System.out.println("run方法线程体" + i);
        }
    }
    public static void main(String[] args) {
        //main线程,主线程

        TestThread testThread = new TestThread();//创建一个线程对象
        testThread.start();//调用start()方法,启动线程
        for (int i = 0; i < 10; i++) {
            System.out.println("main方法线程体" + i);
        }
    }
}

TestThread
可以看到两个线程的执行过程是混乱的,这就说明两个线程的执行顺序是随机的,并不是按照调用顺序来执行的。
但一般不建议使用继承Thread类的方式实现多线程,因为Java是单继承的,子类继承Thread类之后,会限制后续扩展。

实现Runnable接口

Thread类就实现了Runnable接口,我们也可以实现Runnable接口并实现run()方法来实现多线程。在创建Thread类的时候,将待执行线程作为参数传递,调用start()方法启动。

//实现Runnable接口,并实现run()方法
public class TestThread3 implements Runnable {
    @Override
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println("run 方法线程: " + i);
        }
    }
    public static void main(String[] args) {
        TestThread3 testThread3 = new TestThread3();//创建新线程
        new Thread(testThread3).start();//创建Thread类,并将待执行线程作为参数传递进去,调用start()方法启动
        for (int i = 0; i < 5; i++) {
            System.out.println("main 方法线程: " + i);
        }
    }
}

Runnable
相比于第一种方案,更推荐使用接口方案,继承Runnable接口避免了收到单继承的限制,也方便同一个对象被多个线程使用

实现Callable接口

Callable接口类似于Runnable接口,都是为 其实例可能由另一个线程执行的类 而设计的。 不过相比于Runnable接口实现多线程的方式,实现Callable接口的多线程方式可以返回结果,并可能抛出异常。实现Callable接口并实现call方法。

public class TestCallable implements Callable<Boolean> {

    @Override
    public Boolean call() throws Exception {  //实现call()方法
        for (int i = 0; i < 5; i++) {
            System.out.println("call 方法线程: " + i);
        }
        return true;
    }
    public static void main(String[] args) {
        TestCallable testCallable = new TestCallable();  //创建新任务
        ExecutorService executorService = Executors.newFixedThreadPool(1); //创建线程池
        Future<Boolean> res = executorService.submit(testCallable);  //将任务提交到线程池
        for (int i = 0; i < 5; i++) {
            System.out.println("main 方法线程: " + i);
        }
        executorService.shutdown();  //需要手动关闭线程池服务
    }
}

Callable

最后

代码真的是重质不重量,质量高的代码,是当前代码界提倡的,当然写出高质量的代码肯定需要一个相当高的专业素养,这需要在日常的代码书写中逐渐去吸收掌握,谁不是每天都在学习呀,目的还不是为了一个,为实现某个功能写出高质量的代码。

所以,长征路还长,大家还是好好地做个务实的程序员吧。

最后,小编这里有一系列Android提升学习资料,有兴趣的小伙伴们可以来看下哦~

我的 Android 学习,面试文档,视频收集大整理

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值