bilibili尚硅谷周阳老师JUC并发编程与源码分析课程笔记第一章——线程基础知识复习

本文详细回顾了线程基础知识,介绍了Java并发工具包JUC,探讨了为何多线程在现代硬件背景下重要,涉及线程安全、锁机制和性能问题。文章还剖析了`start`方法的源码,并讲解了用户线程和守护线程的区别,以及守护线程的使用和限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

线程基础知识复习

JUC是什么?

java.util.concurrent在并发编程中使用的工具包

在这里插入图片描述

为什么学习并用好多线程极其重要?

硬件方面

摩尔定律:
它是由英特尔创始人之一Gordon Moore(戈登·摩尔)提出来的。其内容为:
当价格不变时,集成电路上可容纳的元器件的数目约每隔18-24个月便会增加一倍,性能也将提升一倍。
换言之,每一美元所能买到的电脑性能,将每隔18-24个月翻一倍以上。这一定律揭示了信息技术进步的速度。

可是从2003年开始CPU主频已经不再翻倍,而是采用多核而不是更快的主频。

摩尔定律失效了。。。

在主频不再提高且核数在不断增加的情况下,要想让程序更快就要用到并行或并发编程。

软件方面

面试B格可以高一点点

充分利用多核处理器

提高程序性能,高并发系统

提高程序吞吐量,异步+回调等生产需求

弊端及问题

线程安全性问题,例如:i++是非原子操作、集合类安全否

线程锁问题,例如:synchronized锁,但是是重量级锁

线程性能问题,例如:了解偏向锁、轻量级锁

start线程开启源码分析

package com.fastech.juc;

public class ThreadBaseDemo {
   

    public static void main(String[] args) {
   
        Thread t1 = new Thread(() -> {
   }, "t1");
        t1.start();
    }

}

查询start()方法源码

public synchronized void start() {
   
    if (threadStatus != 0)
        throw new IllegalThreadStateException();

    group.add(this);

    boolean started = false;
    try {
   
        start0();
        started = true;
    } finally {
   
        try {
   
            if (!started) {
   
                group.threadStartFailed(this);
            }
        } catch (Throwable ignore) {
   
            /* do nothing. If start0 threw a Throwable then
              it will be passed up the call stack */
        }
    }
}

// native表示JNI本地接口调用,调的是第三方C语言编写的底层函数,或者是操作系统的底层代码
// JNI代表Java native interface,Java本地接口
private native void start0();

Java语言本身底层就是C++语言,OpenJDK就是指C++源语级别对Java语言的描述,OpenJDK源码网址:https://openjdk.org/

start0()方法具体做了哪些操作,其实就是OpenJDK源码里面的openjdk8\jdk\src\share\native\java\lang\thread.c、openjdk8\hotspot\src\share\vm\prims\jvm.cpp、openjdk8\hotspot\src\share\vm\runtime\thread.cpp三个类

OpenJDK和JNI一般是一一对应的,Thread.java对应就是thread.c,start0其实就是JVM_StartThread。此时查看源代码可以看到在jvm.h中找到了声明,jvm.cpp中有实现

thread.c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值