【JavaEE-多线程背景-线程等待-线程的六种状态-线程安全问题-详解】

🌈个人主页SKY-30
个人推荐基于java提供的ArrayList实现的扑克牌游戏 |C贪吃蛇详解
学好数据结构,刷题刻不容缓点击一起刷题
🌙心灵鸡汤总有人要赢,为什么不能是我呢
在这里插入图片描述

在这里插入图片描述

🌈🌈🌈Java的多线程

⚡⚡⚡多线程的背景

为了充分利用cpu的多核心特性,我们引进了一种新的编程形式,并发编程,当然进程也可以进行并发编程,但是进程太"重"了,我们每次创建一个进程需要耗费很大的资源,对于有些业务场景可能需要对进程频繁的创建和删除,所以我们又引进了一个更轻量的进程-线程.

在这里插入图片描述

⚡⚡⚡多线程和多进程的联系

线程包含在进程之中,一个进程中至少包含一个或多个线程,对于线程来说它比进程创建和销毁的成本更小,并且一个进程中的多个线程是公用一份系统资源的(硬盘,网络带宽,内存…).

进程是操作系统资源分配的基本单位

线程是操作系统调度执行的基本单位

在这里插入图片描述

🌈🌈🌈在Java中使用多线程

==在Java中我们使用Java标准库中的Thread对象实现多线程.==对于实现Java的多线程我们这里有多种方式,这里给大家全部列举出来.

🌈🌈🌈创建线程

⚡⚡⚡⚡实现Thread类

我们可以实现一个继承了Thread类的类,然后重写run方法,在run方法中完成多线程的代码逻辑.然后再main方法中实例化对象,启动线程.

// 定义一个Thread类,相当于一个线程的模板
class MyThread01 extends Thread {
   
   
    // 重写run方法// run方法描述的是线程要执行的具体任务
    @Overridepublic void run() {
   
   
        System.out.println("hello, thread.");
    }
}

/**
 * 继承Thread类并重写run方法创建一个线程
 *
 * 
 */
public class Thread_demo01 {
   
   
    public static void main(String[] args) {
   
   
        // 实例化一个线程对象
        MyThread01 t = new MyThread01();
        // 真正的去申请系统线程,参与CPU调度
        t.start();
    }
}

⚡⚡⚡实现Runnable接口

这里我们也可以通过实现Runnable接口,然后实现run方法,实现多线程.然后将Runnable以参数的形式传递给Thread类,完成线程的创建.

// 创建一个Runnable的实现类,并实现run方法
// Runnable主要描述的是线程的任务
class MyRunnable01 implements Runnable {
   
   
    @Overridepublic void run() {
   
   
        System.out.println("hello, thread.");
    }
}
/**
 * 通过继承Runnable接口并实现run方法
 * 
 * 
 */
public class Thread_demo02 {
   
   
    public static void main(String[] args) {
   
   
        // 实例化Runnable对象
        MyRunnable01 runnable01 = new MyRunnable01();
        // 实例化线程对象并绑定任务
        Thread t = new Thread(runnable01);
        // 真正的去申请系统线程参与CPU调度
        t.start();
    }
}

⚡⚡⚡使用匿名内部类实现线程

由于我们上面的几种创建方式,都是利用继承和接口的形式,通过匿名内部类的学习,我们很容易想到我们完全可以利用匿名内部类实现一个线程,大大简化了代码的复杂性,是一种比较流行的形式.

/**
 * 通过Thread匿名内部类的方法创建一个线程
 * 
 *
 */
public class Thread_demo03 {
   
   public static void main(String[] args) {
   
   
        Thread t = new Thread(){
   
   
            // 指定线程任务
            @Override
            public void run() {
   
   
                System.out.println(Thread.currentThread().getName());
            }
        };
        // 真正的申请系统线程参与CPU调度
        t.start();
    }
}

⚡⚡⚡通过Runnable匿名内部类创建一个线程

**
 * 通过Runnable匿名内部类创建一个线程
 * 
 *
 */
public class Thread_demo04 {
   
   public static void main(String[] args) {
   
   
        Thread t = new Thread(new Runnable() {
   
   
            // 指定线程的任务
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值