java线程的创建总结

Java线程的启动有三种方式,本文通过比较,对Java线程的启动方式和线程特点做个总结!

1.继承Thread类创建线程
这种方式一般需要重写父类run方法,然后调用start()启动线程,实例如下

public class Thread1 extends Thread{

    public void run() {
        System.out.println("I am thread1");
    }

}

2.实现Runnable接口创建线程

public class Thread2 implements Runnable {

    @Override
    public void run() {

        System.out.println("I am thread2");
    }

}

3.实现Callable接口创建线程

public class Thread3 implements Callable<String> {

    @Override
    public String call() throws Exception {
        System.out.println("I am thread3");
        return "hello world";
    }
}

4.三种方式的启动测试

public class ThreadStartTest {

    @Test
    public void threadTest() throws Exception{
        Thread1 thread1 = new Thread1();
        thread1.start();//线程1启动

        Runnable runnable = new Thread2();
        // Runnable实现类必须显式地将一个任务附着到线程上
        Thread runnableThread = new Thread(runnable);
        runnableThread.start();//线程2启动

        Callable<String> callable = new Thread3();
        FutureTask<String> futureTask = new FutureTask<String>(callable);
        Thread callableThread = new Thread(futureTask);
        callableThread.start();//线程3启动
        //获得call()方法返回值
        System.out.println(futureTask.get());
    }
}

运行结果如下图所示:
这里写图片描述

5.三种启动方式的比较
(1)通过继承Thread类来创建线程实现较为简单,但是由于Java的单继承原则,不能再继承其他的类,程序的可扩展性受到很大限制。而且从面向接口编程的角度来讲,更提倡通过实现Runnable或Callable接口来创建线程。
(2)Runnable 和Callable的区别
Callable的call()方法可以有返回值,也可以抛出异常,而Callable的run()方法则不能。对需要线程执行结果的场景使用Callable更合适

6.Java线程的状态
这里写图片描述
7.线程优先级注意事项
Java线程的优先级用整数1到10表示,数值越大优先级越高,但是优先级高的并不意味着一定会优先执行,只是几率更大而已。实际编程时在逻辑上不要依赖Java线程的优先级,不靠谱。此外Java的优先级依赖于操作系统,不同的操作系统有不同的线程优先级的取值范围,而Java的优先级只能从1到10,这就有可能出现某几个定义不同的优先级线程在有的系统里却对应着同一个优先级的重叠情况。总之不要依赖优先级!

这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值