博客
关于我
JAVA ————线程的三种创建方式
阅读量:504 次
发布时间:2019-03-07

本文共 3719 字,大约阅读时间需要 12 分钟。

Java多线程编程实践指南——掌握_Thread类及其相关接口

在Java编程中,多线程编程是开发中常见但又复杂的一部分。掌握_Thread类及其相关接口是入门级开发者的必经之路。本文将从Thread类的继承、Runnable接口的实现以及Callable接口的使用三方面展开,帮助开发者全面了解Java多线程编程的基础知识。

一、继承Thread类

当我们需要为Java程序创建自定义线程时,最直接的方法是继承_Thread类。通过继承Thread类,我们可以利用其内置的状态管理、线程终止机制等功能,同时实现自己的线程逻辑。以下是使用继承Thread类创建线程的示例代码:

package com.company;public class 创建线程1 extends Thread {    @Override    public void run() {        for (int i = 0; i < 20; i++) {            System.out.println("另一个线程执行中" + i);        }    }}public class 主线程 {    public static void main(String[] args) {        创建线程1 a = new 创建线程1();        a.start();        for (int i = 0; i < 2000; i++) {            System.out.println("主线程执行中" + i);        }    }}

技巧与注意事项

  • 线程执行时,run()方法会自动处理异常,所以无需在run()中显式声明throws语句。
  • start()方法启动线程并调用其run()方法。
  • 主线程和子线程的执行顺序由操作系统内核决定,通常是复合式执行。
  • 二、实现Runnable接口

    除了继承Thread类外,另一种常见的线程编程方式是实现Runnable接口。Runnable接口定义了一个标准的run()方法,为线程提供执行逻辑。通过实现Runnable接口,我们可以更灵活地控制线程的执行方式。以下是实现Runnable接口创建线程的示例代码:

    package com.company;public class 创建线程2 implements Runnable {    @Override    public void run() {        for (int i = 0; i < 20; i++) {            System.out.println("另一个线程执行中" + i);        }    }}public class 主线程 {    public static void main(String[] args) {        创建线程2 thread = new 创建线程2();        new Thread(thread).start();        for (int i = 0; i < 2000; i++) {            System.out.println("主线程执行中" + i);        }    }}

    优势分析

  • 接口实现方式在一定程度上比继承Thread类更灵活。
  • 实现Runnable接口的线程与任何Thread实例可以进行交换。
  • Runnablerun()方法可以被多个线程共享,简化资源管理。
  • 三、实现Callable接口

    对于需要线程执行,并且希望获取具体返回值的情况,推荐使用Callable接口。Callable接口定义了一个方法call(),允许线程在执行过程中返回一个值或抛出异常。这种方式不仅提供了线程执行的灵活性,还能将结果直接返回,便于之后的处理和使用。以下是实现Callable接口创建线程的示例代码:

    package com.company;import java.util.concurrent.Future;import java.util.concurrent.ExecutorService;public class 创建线程3 implements Callable
    { @Override public Boolean call() throws Exception { for (int i = 0; i < 20; i++) { System.out.println(Thread.currentThread().getName() + "输出了" + i); } return true; }}public class 主线程 { public static void main(String[] args) throws Exception { ExecutorService service = Executors.newFixedThreadPool(1); Future
    future = service.submit(new 创建线程3()); boolean result = future.get(); System.out.println("结果是否:" + result); service.shutdown(); }}

    优势分析

  • Callable接口允许线程执行返回一个具体的结果值。
  • call()方法可以抛出异常,方便异常处理。
  • 使用ExecutorService来管理线程池,实现线程资源的高效利用。
  • 四、线程池的应用

    在实际编程中,频繁创建线程会带来性能开销。线程池提供了更高效的资源管理方式。推荐使用ExecutorService来管理线程池,定期关闭线程池以释放资源。

    import java.util.concurrentLinksExecutorService;import java.util.concurrent.Future;import java.util.concurrent.ThreadLocalExecutor;public class 线程池应用 {    public static void main(String[] args) throws Exception {        ExecutorService pool = new ThreadLocalExecutor(5);        for (int i = 0; i < 10; i++) {            Future
    future = pool.submit(() -> { try { System.out.println("正在计算:" + i); Thread.sleep(1000); System.out.println("计算完成:" + i); } catch (InterruptedException e) { System.out.println("线程被打断:" + i); } }); future.get(); } pool.shutdown(); }}

    优化建议

  • 定时关闭线程池:使用shutdown()shutdownNow()方法,及时释放资源。
  • 线程池配置:根据业务需求合理配置线程池的大小(如固定容量、核心数、队列容量等)。
  • 异步任务处理:通过线程池提交任务,提高多任务处理效率。
  • 五、线程编程的注意事项

  • 线程安全:在线程访问共享资源时,要确保通过synchronized关键字或Lock机制实现互斥。
  • 资源管理:线程池、 ExecutorService等资源需在合适的时候关闭,避免资源泄漏。
  • 异常处理:线程执行过程中可能会遇到异常,需合理处理并及时释放资源。
  • 性能优化:通过线程池和ExecutorService等机制优化线程资源的使用,避免不必要的线程开销。
  • 六、总结

    在Java多线程编程中,选择合适的线程实现方式至关重要。无论是通过继承Thread类、实现Runnable接口,还是 Callable接口,都有其自身的特点和适用场景。在实际应用中,线程池的使用能够有效地优化资源利用率。本文通过实例分析,帮助开发者更好地理解和掌握Java多线程编程的基础知识,为后续的高级多线程开发打下坚实的基础。

    转载地址:http://tuhjz.baihongyu.com/

    你可能感兴趣的文章
    Osgi环境配置
    查看>>
    OSG——选取和拖拽
    查看>>
    OSG中找到特定节点的方法(转)
    查看>>
    OSG学习:C#调用非托管C++方法——C++/CLI
    查看>>
    OSG学习:OSG组成(三)——组成模块(续):OSG核心库中的一些类和方法
    查看>>
    OSG学习:OSG组成(二)——渲染状态和纹理映射
    查看>>
    OSG学习:WIN10系统下OSG+VS2017编译及运行
    查看>>
    OSG学习:人机交互——普通键盘事件:着火的飞机
    查看>>
    OSG学习:几何体的操作(一)——交互事件、简化几何体
    查看>>
    OSG学习:几何体的操作(二)——交互事件、Delaunay三角网绘制
    查看>>
    OSG学习:几何对象的绘制(一)——四边形
    查看>>
    OSG学习:几何对象的绘制(三)——几何元素的存储和几何体的绘制方法
    查看>>
    OSG学习:几何对象的绘制(二)——简易房屋
    查看>>
    OSG学习:几何对象的绘制(四)——几何体的更新回调:旋转的线
    查看>>
    OSG学习:场景图形管理(一)——视图与相机
    查看>>
    OSG学习:场景图形管理(三)——多视图相机渲染
    查看>>
    OSG学习:场景图形管理(二)——单窗口多相机渲染
    查看>>
    OSG学习:场景图形管理(四)——多视图多窗口渲染
    查看>>
    OSG学习:新建C++/CLI工程并读取模型(C++/CLI)——根据OSG官方示例代码初步理解其方法
    查看>>
    Sql 随机更新一条数据返回更新数据的ID编号
    查看>>