java线程相关

JAVA线程

什么是线程?

  • 线程是一个程序内部的一条执行流程
public static void main(String[] args) {
	// 代码...
	for (int i = 0; i < 10; i++) {
		System.out.println(i);
	}
	// 代码...
}
  • 程序中如果只有一条执行流程,那这个程序就是单线程的程序

什么是多线程?

  • 多线程是指从软硬件上实现的多条执行流程的技术(多条线程由CPU负责调度执行)

**例:百度网盘能够同时上传和下载文件,因此百度网盘在后台肯定要提供两条执行流程,一个用来上传,另一个用来下载。**这就是多线程模式。

如何在程序中创建出多条线程?

  • java是通过java.lang.Thread类的对象来代表线程的。
  • 有两种方法可以创建新的执行线程,一种是将类声明为Thread类的子类,此子类应该覆盖Thread的run方法,然后可以分配和启动子类的实例;另一种方法是声明一个实现Runnable接口的类,该类实现run方法,再分配类的实例。

方法一创建线程

  • 定义一个子类MyThread继承线程类Thread,重写run()方法
  • 创建MyThread类的对象
  • 调用线程对象的start()方法启动线程(启动后还是执行run方法)

优点:编码简单

缺点:线程类已经继承Thread,无法继承其他类,不利于功能的扩展

注意

1.启动线程必须是调用start()方法,不是调用run方法。

若调用的run方法,在主线程main中会将子类当作一个普通对象调用其方法,而不是另外开一个线程。

2.不要把主线程任务放在启动子线程之前(否则每次都是主线程先执行完,再启动子线程,就不是多线程了)。

方法二创建线程

  • 定义一个线程任务类MyRunnable实现Runnable接口,重写run()方法

  • 创建MyRunnable任务对象(注意任务对象并不是线程对象

  • 把MyRunnable任务对象交给Thread处理

    // 封装Runnable对象称为线程对象
    public Thread(Runnable target)
    
  • 调用线程对象的start()方法启动线程

优点:任务类只是实现接口,可以继续继承其他类、实现其他接口,扩展性强

缺点:需要多创建一个Runnable对象

方法二的匿名内部类写法

  • 创建Runnable的匿名内部类对象
  • 交给Thread线程对象
  • 调用线程对象的start()启动线程

以下面代码为例

package Thread;

public class ThreadTest2_2 {
    public static void main(String[] args) {
        // 创建Runnable的匿名内部类
        Runnable target = new Runnable() {
            @Override
            public void run() {
                for (int i = 1; i <= 5; i++) {
                    System.out.println("子线程1:" + i);
                }
            }
        };
        new Thread(target).start();

        // 简化形式1,直接在Thread构造函数中传入匿名内部类
        new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 1; i <= 5; i++) {
                    System.out.println("子线程2:" + i);
                }
            }
        }).start();

        // 由于Runnable是函数式接口,所以可以用lambda表达式简化
        new Thread(() -> {
            for (int i = 1; i <= 5; i++) {
                System.out.println("子线程3:" + i);
            }
        }).start();

        for (int i = 1; i <= 5; i++) {
            System.out.println("主线程:" + i);
        }
    }
}
  • 14
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YUKIPEDIA~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值