并发编程(壹):创建线程的三种方式及其对比(代码片段)

xzy- xzy-     2022-12-13     698

关键词:

创建线程的三种方式及其对比


1. 继承 Thread类

(1). 继承Thread类。并重写run()方法,该方法无参数,无返回值;

(2). 创建子类实例,并实例化对象;

(3). 通过start()方法启动,注意:不是通过run()方法启动。

public class ThreadDemo extends Thread
    public void run()
        System.out.println("继承Thread创建线程的.");
    


public class ThreadAction 
    public static void main(String[] args) 
        Thread threadDemo=new ThreadDemo();
        threadDemo.start();
    

2. 实现Runnable接口

(1). 实现Runnable接口,并重新run()方法;

(2). 创建Runnable实现类的实例,并用这个实例作为Thread的target创建线程对象;

(3). 通过start()启动线程。

public class RunnableDemo implements Runnable

    @Override
    public void run() 
        System.out.println("实现Runnable创建线程的.");
    


public class ThreadAction 
    public static void main(String[] args) 
        RunnableDemo runnableDemo = new RunnableDemo();
        Thread thread = new Thread(runnableDemo);
        thread.start();
    

3. 通过Callable和Future创建线程

产生背景:这种创建线程的方式在jdk1.5后出现,目的是弥补上面两种创建线程方式,其中的run()方法不能有返回值,不能抛出异常等问题。

(1). 创建实现Callable的实现类,并实现call()方法;

(2). 创建该实现类的实例(从java8开始可以直接使用Lambda表达式创建Callable对象);

(3). 使用FutureTask类来包装Callable对象,该FutureTask对象封装了Callable对象的call()方法的返回值;

(4). 使用FutureTask对象作为Thread对象的target创建并启动线程(因为FutureTask实现了Runnable接口);

(5). 调用FutureTask对象的get()方法来获得子线程执行结束后的返回值。

public class CallableDemo implements Callable<String> 
    
    @Override
    public String call() throws Exception 
        return "hello ,我是通过实现Callable接口的方式创建线程。";
    


public class ThreadAction 
    public static void main(String[] args) 
        CallableDemo callableDemo = new CallableDemo();
        // 使用FutureTask类来包装Callable对象
        FutureTask<String> stringFutureTask = new FutureTask<>(callableDemo);
        Thread thread = new Thread(stringFutureTask);
        thread.start();
        try 
            System.out.println(stringFutureTask.get());
         catch (InterruptedException | ExecutionException e) 
            e.printStackTrace();
        
    

4. 创建线程的三种方式的对比

实现Runnable、Callable接口的方式创建多线程

  • 优势:该线程只是实现了接口,还可以继承其他类.在这种方式下多个线程共享一个target对象,所以非常适合多个相同线程来处理同一份资源的情况,从而可以将CPU、代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想.
  • 劣势:编程稍微复杂,如果要访问当前线程,则必须使用Thread.currentThread()方法。

继承Thread类

  • 优势:代码编写简单,当前Thread可用this获取.
  • 劣势:继承Thread类,不可继承其他类.

创建线程的三种方式及其优缺点

packagetestA;importjava.util.concurrent.Callable;importjava.util.concurrent.ExecutionException;importjava.util.concurrent.FutureTask;publicclassThreadTest{publicstaticvoidmain(String[]args){//1.继承Thre 查看详情

java——多线程高并发系列之创建多线程的三种方式(threadrunnablecallable)(代码片段)

...xff09;写在前面历时一个星期,终于整完了Java多线程高并发这个系 查看详情

java-多线程-创建线程的三种方式

JAVA-多线程-创建线程的三种方式并发:同一时间只有一条指令在执行,多个进程的指令被快速轮换执行。并行:同一时间有多条指令在多个处理器上运行。进程:每个运行中的程序就是一个进程。线程:线程(Thread)也被称为轻... 查看详情

线程的三种创建方式你get了吗?(代码片段)

...2022春招或暑期实习,祝大家每天进步亿点点!Java并发编程Day4本篇总结的是如何在Java中避免创建不必要的对象,后续会每日更新~关于《我们一起学Redis》、《我们一起学HarmonyOS》等知识点可以查看我的往期博客相信... 查看详情

线程的三种创建方式你get了吗?(代码片段)

...2022春招或暑期实习,祝大家每天进步亿点点!Java并发编程Day4本篇总结的是如何在Java中避免创建不必要的对象,后续会每日更新~关于《我们一起学Redis》、《我们一起学HarmonyOS》等知识点可以查看我的往期博客相信... 查看详情

大数据必学java基础(七十六):创建线程的三种方式(代码片段)

文章目录创建线程的三种方式一、继承Thread类二、实现Runnable接口三、实现Callable接口创建线程的三种方式一、继承Thread类在学习多线程之前,以前的代码是单线程的吗?不是,以前也是有三个线程同时执行的。现在... 查看详情

[java多线程]线程创建的三种方式,线程的互斥(代码片段)

...(一个进程)运行时产生了不止一个线程并行和并发:并行:多个cpu实例或者多台机器同时执行一段处理逻辑,是真正的同时。并发:通过cpu调度算法,让用户看上去同时执行,实际上从cpu操作层... 查看详情

05_创建线程三种方式对比

...较适合多个相同线程来处理同一份资源的情况。【缺点】编程略复杂,如果需要访问当前线程,则必须使用ThreadcurrentThread()方法。 【采用继承Thread类来创建多线 查看详情

[java多线程]线程创建的三种方式,线程的互斥,线程的同步(代码片段)

...(一个进程)运行时产生了不止一个线程并行和并发:并行:多个cpu实例或者多台机器同时执行一段处理逻辑,是真正的同时。并发:通过cpu调度算法,让用户看上去同时执行,实际上从cpu操作层... 查看详情

java多线程实现的三种方式(代码片段)

文章目录实现多线程方式一:继承Thread类方法介绍实现步骤代码演示思考问题实现多线程方式二:实现Runnable接口Thread构造方法实现步骤代码演示实现多线程方式三:实现Callable接口方法介绍实现步骤代码演示三种实现方式... 查看详情

第十二章并发编程(代码片段)

目录第十二章并发编程操作系统多道技术进程线程协程并发进程与线程锁池第十二章并发编程操作系统控制软硬资源调度进度多道技术产生背景针对单核,实现并发是什么?内存中存放多道程序宏观上并行,微观上串行看起来多... 查看详情

设计模式:单例模式的三种创建方式及其各自的优缺点

单例模式:确保一个类仅仅有一个实例,并提供全局訪问点。在Java中实现单例模式须要私有的构造器,一个静态方法和一个静态变量。确定在性能和资源上的限制,怎样选择适当的方案来实现单例,以解决多线程的问题。假设... 查看详情

线程的三种创建方式

java中创建线程的方法有三种:1.继承Thread类实现2.实现Runnable接口3.使用Callable和Future创建                      ------------------------继承Thread类创建线程-... 查看详情

创建线程的三种方式

...ead类,重写run方法,调用start方法启动线程;packageThread;//创建线程方式一:继承Thread类,重写run()方法,调用start开启线程//总结:注意,线程开启不一定立即执行,由CPU调度执行publicclassthreadDemo1extendsThread@Overridepublicvoidrun()//run... 查看详情

java创建线程的三种主要方式

Java创建线程的主要方式一、继承Thread类创建  通过继承Thread并且重写其run(),run方法中即线程执行任务。创建后的子类通过调用start()方法即可执行线程方法。  通过继承Thread实现的线程类,多个线程间无法共享线程类的实... 查看详情

java创建线程的三种方式

1.继承Runnable接口packagetest;classRunnableDemoimplementsRunnable{privateThreadt;privateStringthreadName;RunnableDemo(Stringname){threadName=name;System.out.println("Creating"+name);}publicvoidrun(){Syste 查看详情

java创建线程的三种方式

http://blog.csdn.net/longshengguoji/article/details/41126119线程的四种创建方式:(1)继承Thread类(2)实现Runnable接口(3)应用程序可通过使用Executor框架来创建线程池(4)实现callable接口线程的几种可用状态(1)新建(2)可运行(3)运... 查看详情

java创建线程的三种方式,同步锁的实现synchronized,lock(代码片段)

一、继承Thread类创建通过继承Thread并且重写其run()方法,通过调用start()方法即可执行线程方法。写法1:publicclassMyThreadextendsThread@Overridepublicvoidrun()for(inti=0;i<15;i++)System.out.println(getName()& 查看详情