Java创建线程的三种方式 以及区别

您所在的位置:网站首页 盲板有几种形式有何区别 Java创建线程的三种方式 以及区别

Java创建线程的三种方式 以及区别

2024-07-14 18:08:33| 来源: 网络整理| 查看: 265

前言

Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例。 Java可以用三种方式来创建线程:

1、继承Thread类创建线程 2、实现Runnable接口创建线程 3、使用Callable和Future创建线程

1、继承Thread类创建线程

通过继承Thread类来创建并启动多线程的一般步骤如下 1、定义Thread类的子类,并重写该类的run()方法,该方法的方法体就是线程需要完成的任务,run()方法也称为线程执行体 2、创建Thread子类的实例,也就是创建了线程对象 3、启动线程,即调用线程的start()方法

public class MyThread extends Thread { public void run(){ System.out.println("打印---测试1"); } } public class Main { public static void main(String[] args) { new MyThread().start();//创建并启动线程 } } 2、实现Runnable接口创建线程

通过实现Runnable接口创建并启动线程一般步骤如下: 1、定义Runable接口的实现类,一样要重写run()方法,这个run()方法和Thread中的run()方法一样是线程的执行体 2、创建Runable实现类的实例,并用这个实例作为Thread的target来创建Thread对象,这个Thread对象才是真正的线程对象 3、通过调用线程对象的start()方法来启动线程

public class MyThread2 implements Runnable { @Override public void run() { System.out.println("打印---测试Runnable"); } } public class Main2 { public static void main(String[] args) { //创建并启动线程 MyThread2 myThread2=new MyThread2(); Thread thread=new Thread(myThread2); thread.start(); // 或者 new Thread(new MyThread2()).start(); } } 3、使用Callable和Future创建线程

1、创建 Callable 接口的实现类,并实现 call()方法,该call()方法将作为线程执行体,并且有返回值 2、创建Callable实现类的实例,使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值 3、使用FutureTask对象作为 Thread 对象的 target 创建并启动新线程 4、调用FutureTask对象的 get()方法来获得子线程执行结束后的返回值

public class MyThread3 implements Callable { @Override public Object call() throws Exception { System.out.println("打印---Callable方式"); return 10; } } public class Main3 { public static void main(String[] args) throws ExecutionException, InterruptedException, TimeoutException { Callable callable=new MyThread3(); FutureTask task=new FutureTask(callable); new Thread(task).start(); System.out.println(task.get()); Thread.sleep(10);//等待线程执行结束 //task.get() 获取call()的返回值,若调用时call()方法未返回,则阻塞线程等待返回值 //get的传入参数为等待时间,超时抛出超时异常;传入参数为空时,则不设超时,一直等待 System.out.println(task.get(100L, TimeUnit.MILLISECONDS)); } } 三种方式的优缺点 采用继承Thread类方式: (1)优点:编写简单,如果需要访问当前线程,无需使用Thread.currentThread()方法,直接使用this,即可获得当前线程 (2)缺点:因为线程类已经继承了Thread类,所以不能再继承其他的父类采用实现Runnable接口方式: (1)优点:线程类只是实现了Runable接口,还可以继承其他的类。在这种方式下,可以多个线程共享同一个目标对象,所以非常适合多个相同线程来处理同一份资源的情况,从而可以将CPU代码和数据分开,形成清晰的模型,较好的体现了面向对象的思想。 (2)缺点:编程稍微复杂,如果需要访问当前线程,必须使用Thread.currentThread()方法Runnable和Callable的区别: (1)Callable规定的方法是call(),Runnable规定的方法是run() (2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值的 (3)call方法可以抛出异常,run方法不可以,因为run方法本身没有抛出异常,所以自定义的线程类在重写run的时候也无法抛出异常 (4)运行Callable任务可以拿到一个Future对象,表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。通过Future对象可以了解任务的执行情况,可取消任务的执行,还可获取执行结果 start()和run()的区别

1、start()方法用来,开启线程,但是线程开启后并没有立即执行,他需要获取CPU的执行权才可以执行 2、run()方法是由JVM创建完本地操作系统级线程后回调的方法,不可以手动调用(否则就是普通方法)



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭