Java中使用Thread类和Runnable接口实现多线程的区别

Java中实现多线程有两种方式:使用Thread类和使用Runnable接口。这两种方式最主要的区别就是,使用Runnable实现的多线程程序可以多个线程共享同一个实例变量,而使用Thread实现的多线程程序则不行,每个线程都会拥有自己独立的实例变量。下面我们分别来详细讲解。

一、使用Thread类实现多线程

  1. 通过继承Thread类并重写run方法来实现多线程。线程启动之后,会自动调用run方法,以此完成线程的功能。

示例代码:

public class MyThread extends Thread {
    private String name;
    public MyThread(String name) {
        this.name = name;
    }
    public void run() {
        for (int i = 1; i <= 10; i++) {
            System.out.println(name + "运行第" + i + "次");
        }
    }
}

public class TestMyThread {
    public static void main(String[] args) {
        MyThread t1 = new MyThread("线程1");
        MyThread t2 = new MyThread("线程2");
        t1.start();
        t2.start();
    }
}
  1. 通过创建Thread类的匿名对象来实现多线程。这种方式比较简单,但是不方便对对象进行操作。

示例代码:

public class TestAnonymousThread {
    public static void main(String[] args) {
        new Thread() {
            public void run() {
                for (int i = 1; i <= 10; i++) {
                    System.out.println("线程1运行第" + i + "次");
                }
            }
        }.start();

        new Thread() {
            public void run() {
                for (int i = 1; i <= 10; i++) {
                    System.out.println("线程2运行第" + i + "次");
                }
            }
        }.start();
    }
}

二、使用Runnable接口实现多线程

使用Runnable实现多线程的步骤是:创建Runnable接口的实例化对象,将该实例化对象交给Thread类的构造方法,然后调用start方法启动线程。

示例代码:

public class MyRunnable implements Runnable {
    private int ticket = 5;
    public void run() {
        for (int i = 1; i <= 10; i++) {
            if (ticket > 0) {
                System.out.println("卖票:ticket = " + ticket--);
            }
        }
    }
}

public class TestRunnable {
    public static void main(String[] args) {
        MyRunnable r = new MyRunnable();
        Thread t1 = new Thread(r);
        Thread t2 = new Thread(r);
        Thread t3 = new Thread(r);
        t1.start();
        t2.start();
        t3.start();
    }
}

以上是Java中使用Thread类和Runnable接口实现多线程的区别,希望能对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中使用Thread类和Runnable接口实现多线程的区别 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • cdr怎么再制页面? cdr插入页面的方法

    下面我将详细讲解如何使用 CDR(CorelDRAW)重新制作页面,以及如何插入页面元素。 如何重新制作页面 步骤 1:新建画布 首先需要在 CDR 中新建一个空白的画布,可以通过菜单栏的 “文件 – 新建” 命令或者快捷键 Ctrl + N 来实现。你可以根据页面的尺寸需求来设置画布的大小和分辨率。 步骤 2:导入原页面 接下来需要将原页面导入到 CDR …

    other 2023年6月27日
    00
  • AtCoder Beginner Contest 146解题报告

    AtCoder Beginner Contest 146解题报告 最近,AtCoder Beginner Contest 146(以下简称ABC 146)已经结束了,本文的目的是回顾这次比赛,分析各道题目及其解法,帮助读者更好地理解比赛。 比赛总体情况 ABC 146是一场循环赛,共有六道题目。根据官网数据,本次比赛共有2433名选手参赛,其中AC人数最多的…

    其他 2023年3月28日
    00
  • C#基础篇 – 正则表达式入门

    C#基础篇-正则表达式入门 正则表达式是一种用于匹配字符串的模式。在C#中,我们可以使用正则表达式来验证输入、搜索文本、替换文本等。本文将介绍正则表达式的基本概念和语法,并提供两个示例说明。 正则表达式的基本概念 正则表达式是一种用于匹配字符串的模式。在正则表达式中,我们可以使用特殊字符和元字符来表示字符串的模式。以下是一些常用的特殊字符和元字符: .:匹配…

    other 2023年5月5日
    00
  • Redis键值设计的实践

    Redis是一款高性能、可扩展、支持多种数据结构的NoSQL数据库。在使用Redis的过程中,如何设计键值对的结构是非常重要的,这会直接影响到Redis的性能和数据结构的效率。以下是Redis键值设计的实践完整攻略。 1. 命名规范 对于键值的命名,需要遵守一定的规范。建议使用有意义的名称,要让键名清晰明了,能反映出其作用。常见的命名规范包括使用缩写、驼峰式…

    other 2023年6月25日
    00
  • 使用CSS做出一个嵌套导航.

    当使用CSS创建嵌套导航时,可以按照以下步骤进行操作: 创建HTML结构:首先,需要创建一个包含导航的HTML结构。可以使用无序列表(<ul>)和列表项(<li>)来构建导航的层次结构。例如: <ul class=\"nav\"> <li><a href=\"#\"…

    other 2023年7月28日
    00
  • Linux单用户模式(修改密码、运行级别)方法详解

    Linux单用户模式(修改密码、运行级别)方法详解 如果你忘记了Linux系统的root账户密码或者需要更改运行级别,那么Linux单用户模式就是你的救命稻草。本文将详细介绍如何进入Linux单用户模式,并使用该模式下的命令来修改密码和更改运行级别。 进入Linux单用户模式 开机后,在Grub引导界面时按“e”键,进入编辑模式。 找到启动项中的Linux内…

    其他 2023年3月28日
    00
  • android对so中的section加密技术实现so加固

    SO加固技术是将工程生成的SO文件进行特定的处理,通过一定的加密方式,使攻击者难以直接获取代码中的敏感信息,从而提高安卓应用的安全性。 一、so中的section加密技术 SO文件是以ELF格式来存放的,ELF格式中包含多个Section,其中包含了程序代码、数据、符号表等信息。SO中的Section加密技术就是将指定的Section进行加密。 1.使用ND…

    其他 2023年4月16日
    00
  • 详解angularjs中的隔离作用域理解以及绑定策略

    详解AngularJS中的隔离作用域理解以及绑定策略 在AngularJS中,隔离作用域是一种重要的概念,它允许我们在应用程序中创建独立的作用域,以便在组件之间进行数据的隔离和通信。本文将详细介绍AngularJS中的隔离作用域的理解以及绑定策略,并提供两个示例说明。 隔离作用域的理解 隔离作用域是指在AngularJS中创建的一个独立的作用域,它与父作用域…

    other 2023年8月19日
    00
合作推广
合作推广
分享本页
返回顶部