【达内课程】Thread开启线程

进程和线程

进程就是某个应用程序从还没开始运行,到运行结束的整个过程

可以存在多个进程,但多个进程的执行,其实是高频率的切换,并不是真正意义上的“同时”执行的

多个进程之间切换,会表现出一定的随机性,即:不会完全相同的先执行 A 进程 x 时长,再执行 B 进程 Y 时长,又回到执行 A 进程 x时长

进程其实是线程的载体,同一个进程中可以存在若干个线程

每开启一个进程,都会默认开启一个线程,并执行该线程,这样的线程一般称之为主线程。在主线程的执行过程中,开发者可以自行创建出新的线程并执行,这些新创建的线程称之为子线程,或工作线程

不管是主线程还是子线程,只是启动方式不同,并没有其他区别

单一的线程执行代码是从上至下,从左至右执行。例如下面的代码

		System.out.println("主线程开始");

        for (int i = 0; i < 4; i++) {
            System.out.println("Main i=" + i);
        }

        System.out.println("主线程结束");

运行结果:
在这里插入图片描述

创建线程方式一:继承 Thread

自定义类,继承java.lang.Thread,并重写public void run()方法,在需要启动线程时,创建自定义的类对象,并调用start()方法即可

class CustomThread extends Thread {
    @Override
    public void run() {
        super.run();
        for (int i = 0; i < 100; i++) {
            System.out.println("CustomThread i=" + i);
        }
    }
}

Main

public class Main {
    public static void main(String[] args) {
        System.out.println("主线程开始-----------------");

        CustomThread thread = new CustomThread();
        thread.start();

        for (int i = 0; i < 100; i++) {
            System.out.println("Main i=" + i);
        }

        System.out.println("主线程结束");
    }
}

执行结果

主线程开始-----------------
Main i=0
Main i=1
......
Main i=30
Main i=31
CustomThread i=0
Main i=32
......
Main i=41
CustomThread i=1
Main i=42
CustomThread i=2
Main i=43
CustomThread i=3
......
CustomThread i=33
Main i=44
......
Main i=50
CustomThread i=34
......
Main i=98
CustomThread i=82
Main i=99
CustomThread i=83
主线程结束
CustomThread i=84
......
CustomThread i=99

主线程和子线程交替进行,每次执行结果都是不一样的。

我们将代码开启子线程的代码后移:

		System.out.println("主线程开始-----------------");

        for (int i = 0; i < 100; i++) {
            System.out.println("Main i=" + i);
        }

        CustomThread thread = new CustomThread();
        thread.start();

        System.out.println("主线程结束");

执行代码会先执行完主线程,然后再执行子线程,其实很好理解,因为代码是从上到下执行的:

主线程开始-----------------
Main i=0
Main i=1
Main i=2
......
Main i=9
主线程结束
CustomThread i=0
CustomThread i=1
CustomThread i=2
......
CustomThread i=9

创建线程方式二:实现Runnable接口

自定义类,实现 java.lang.Runnable,并重写public void run()方法,在需要启动线程时,创建自定义的类的对象,并将该对象作为 Thread 的构造方法参数,创建出 Thread 对象,然后调用 Thread 对象的start()方法

class CustomRunner implements Runnable {
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println("CustomRunner i=" + i);
        }
    }
}

启用线程的时候不能再调用start()方法了。因为 CustomRunner 是实现的 Runnable 接口,这个接口中并没有这个方法。它直接继承的是java.lang.Object,当然 Object 中也没有这个方法。而 CustomThread 的对象之所以能调用start方法是因为,它继承的是 Thread,Thread中有start方法。

正确的开启线程方法是:

		CustomRunner runner = new CustomRunner();
        Thread r = new Thread(runner);
        r.start();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值