JAVA多线程基础篇

1、线程开篇

本章主要介绍线程基础概念,使用JAVA基础代码实现多线程编程;后续会整理一篇围绕springboot框架的多线程应用的文章:

  • 线程应用篇:创建线程池、线程池调用

CPU的上线文切换

JVM获取运行核心数,超出JVM核心数的线程,会处于阻塞状态,CPU分配运行线程一定运行时间(windows和linux系统为不同时间),切换前会记录当前线程态,如果线程数时间大于时间片并且线程数超出核心数,就会频繁出现上线文切换严重影响系统效率。

2、进程与线程

  • 进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。
    在 Java 中,当我们启动 main 函数时其实就是启动了一个 JVM 的进程,而 main 函数所在的线程就是这个进程中的一个线程,也称主线程。

  • 线程与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟机栈和本地方法栈,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。
    在这里插入图片描述

3、三种实现线程的方式

  • 继承Thread类创建线程类
public class DemoThread extends Thread {
   

    public static void main(String[] args) {
   
        for (int i = 0; i < 3; i++) {
   
            new DemoThread().start();
        }
    }

    @Override
    public void run() {
   
        try {
   
            Thread.sleep(3000);
        } catch (InterruptedException e) {
   
            e.printStackTrace();
        }
        System.out.println("执行线程");
    }
}

为什么我们调用 start() 方法时会执行 run() 方法,为什么我们不能直接调用 run() 方法?
这是另一个非常经典的 java 多线程面试问题,而且在面试中会经常被问到。很简单,但是很多人都会答不上来!

new 一个 Thread,线程进入了新建状态;调用 start() 方法,会启动一个线程并使线程进入了就绪状态,当分配到时间片后就可以开始运行了。 start() 会执行线程的相应准备工作,然后自动执行 run() 方法的内容,这是真正的多线程工作。 而直接执行 run() 方法,会把 run 方法当成一个 main 线程下的普通方法去执行,并不会在某个线程中执行它,所以这并不是多线程工作

虽然这种实现线程方式很简单,但由于创建线程的方式不够灵活(JAVA类单继承的问题),所以不建议大家采用这种方式实现线程。

  • 实现Runnable接口创建线程类
public class DemoRunnable implements Runnable {
   

    public static void main(String[] args) {
   
        for (int i = 0; i < 3; i++) {
   
            DemoRunnable demoRunnable = new DemoRunnable();
            new Thread(demoRunnable).start();
        }
    }

    @Override
    public void run() {
   
        try {
   
            Thread.sleep
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值