IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Thread类创建线程 -> 正文阅读

[游戏开发]Thread类创建线程

目录

1.在java中执行多线程编辑

1.1通过Thread类创建线程

1.2创建线程方法2

1.3创建线程方法3

1.4创建线程方法4

1.5创建线程方法5

2.多线程执行效率

2.1两个变量同时自增

3.Thread常见构造方法和属性

3.1Thread中的重要方法

3.1.1Thread.start()和Thread.run()方法的区别


1.在java中执行多线程编辑

在java标准库中,给我们提供了一个标准的Thread类,来操作线程。Thread 类也可以视为是 Java 标准库提供的 API(API:Thread 类提供的方法 和 类)。当我们创建好Thread对象,其实和操作系统中的线程是相对应的。即如果我们想要先创建一个线程,就要先创建一个Thread类的对象。

1.1通过Thread类创建线程

首先我们先创建子类,让其继承Thread,并且重写run方法

我们这里的创建线程都是在同一个进程内部实现的。另外我们为了更清楚的表示线程的并发执行,再来举其他的例子:

1.2创建线程方法2

即创建一个类实现Runnable接口,再创建 Runnable实例,并传给Thread实例

通过 Runnable 来描述任务的内容
进一步的再把描述好的任务交给 Thread 实例

class MyRunnable implements Runnable{
    @Override
    public void run() {
        System.out.println("hello Thread");
    }
}
public class TestDemo2 {
    public static void main(String[] args) {
        //这里我们实例化的是Thread本身
        //构造方法里面指定了Runnable实例
        Thread t = new Thread(new MyRunnable());
            t.start();

    }
}

1.3创建线程方法3

public class TestDemo3 {
    public static void main(String[] args) {
        Thread t = new Thread(){
            @Override
            public void run() {
                System.out.println("hello Thread");
            }
        };
        t.start();
    }
}

这里使用了匿名内部类,同时重写run方法和new了个匿名内部类的实例

1.4创建线程方法4

public class TestDemo4 {
    public static void main(String[] args) {
        Thread t = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("hello thread");
            }
        });
        t.start();
    }
}

针对 Runnable 接口 创建的 匿名内部类(这个匿名内部类实现了Runnable 接口)。
同时 将创建出的实例 作为 参数 传给了 Thread 的构造方法.

小结:上述四个方法,我们认为Runnable方法更好一点,因为它能够让线程与线程之间的任务更能够解耦,即让代码之间高内聚,低耦合。即同一类功能的代码放一起,不同功能模块之间,没有关系。也就是说,Runnable只是单纯的描述了一个任务的具体内容,但要怎么执行,它并不关心。

1.5创建线程方法5

public class TestDemo5 {
    public static void main(String[] args) {
            //这是方法4的简化,其中()表示无参数的run方法
            Thread t = new Thread(()->{
            System.out.println("hello Thread");
        });
        t.start();
    }
}

2.多线程执行效率

2.1两个变量同时自增

public class TestDemo6 {
    private static final long count = 10_0000_0000;

    public static void serial() {
        //记录自增开始的时间
        long begin = System.currentTimeMillis();
        long a = 0;
        for (int i = 0; i < count; i++) {
            a++;
        }
        long b = 0;
        for (int i = 0; i < count; i++) {
            b++;
        }
        //记录自增结束的时间
        long end = System.currentTimeMillis();
        System.out.println("花费时间:" + (end - begin) + "ms");
    }


    public static void concurrency() throws InterruptedException {
        long begin = System.currentTimeMillis();
        Thread t1 = new Thread(() -> {
            long a = 0;
            for (int i = 0; i < count; i++) {
                a++;
            }
        });
        t1.start();

        Thread t2 = new Thread(() -> {
            long b = 0;
            long a = 0;
            for (int i = 0; i < count; i++) {
                b++;
            }
        });
        t2.start();

        t1.join();//让main线程等待t1线程执行结束

        t2.join();//让main线程等待t2线程执行结束
        long end = System.currentTimeMillis();
        System.out.println("多线程花费的时间:" + (end - begin));

    }

    public static void main(String[] args) throws InterruptedException {
        //serial();
        concurrency();
    }

}

? ? ? ?虽然这里我们使用多线程效率提高了,但这也是适合数据计算比较多的情况下。如果数据很少,我们就没必要使用多线程,因为创建多线程也是需要花费时间和空间的。因此使用多线程的时候还要看适用场景。

3.Thread常见构造方法和属性

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 方法
Thread()创建线程对象
Thread(Runnable target)使用 Runnable 对象创建线程对象
Thread(String name)创建线程对象,并命名
Thread(Runnable target, String name)使用 Runnable 对象创建线程对象,并命名
Thread(ThreadGroup group,Runnable target)线程可以被用来分组管理,分好的组即为线程组,这个目前我们了解即可

3.1Thread中的重要方法

3.1.1Thread.start()和Thread.run()方法的区别

?因此run()只是一个普通方法,描述一个任务的内容,而且是串行执行,不创建线程。而start()才创建线程。

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-04-09 18:49:29  更:2022-04-09 18:52:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/16 21:09:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码