多线程的基础

本文深入探讨了Java中的多线程特性,包括进程与线程的关系、线程的优先级设定及其对时间片分配的影响。详细阐述了线程的五种状态,并解析了`join()`方法的实现原理,强调了中断、标识位在多线程同步中的作用。此外,还提及了线程安全和并发控制的关键概念。

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

操作系统:会有个多个进程
一个进程多个线程
线程都有各自的计算器、堆栈和局部变量等属性,并且都能
够访问共享的内存变量。处理器(cpu时间片)在这些线程
上高速切换,让使用者感觉到这些线程在同时执行。
现在操作系统基本是采用时分的形式调度运行的线程,操作系统会分出一个一个时间片。线程会分到若干的时间片。
java 天生适合多线程。
priority 优先级
默认5 优先级越高分配的时间片数量越多

线程状态:
初始 运行 阻塞 等待 超时等待 终止
interrupt()中断和其他配合
interrupted 标识位
isAlive 标识位

wait 等待释放锁 sleep 不释放锁。

join本质 源码

public final synchronized void join(long millis)
throws InterruptedException {
long base = System.currentTimeMillis();
long now = 0;

if (millis < 0) {
    throw new IllegalArgumentException("timeout value is negative");
}

if (millis == 0) {
    while (isAlive()) {   
        wait(0);  //join(0)等同于wait(0),即wait无限时间直到被notify
    }
} else {
    while (isAlive()) {
        long delay = millis - now;
        if (delay <= 0) {
            break;
        }
        wait(delay);
        now = System.currentTimeMillis() - base;
    }
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值