线程基础知识总结


一、进程和线程

1. 进程

进程是程序在操作系统中的一次运行实例,是操作系统资源分配的基本单位。每个进程都有独立的内存空间和数据资源。

2. 线程

线程是进程中的一个执行单元,也是CPU 调度的最小单位。同一进程中的多个线程共享进程的内存空间、数据资源等,多个线程可以在单个 CPU 上快速切换执行。


二、并发和并行

1. 并发

  • 在同一时间段内,多个任务交替执行。
  • 可能运行在单核 CPU(时间片轮转) 或 多核 CPU(多个线程切换)。

2. 并行

  • 在同一时刻,多个任务真正同时执行。
  • 必须运行在 多核 CPU 上,每个核心独立运行不同的任务。

三、线程的创建方式

1. 继承 Thread 类

public class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName());
    }
}
public class ThreadDemo {
    public static void main(String[] args) {
        MyThread thread1 = new MyThread();
        thread1.start(); 
    }
}

2. 实现 Runnable 接口

public class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName());
    }
}
public class ThreadDemo {
    public static void main(String[] args) {
    	MyRunnable myRunnable = new MyRunnable();
        Thread thread1 = new Thread(myRunnable);
        thread1.start();
    }
}

3. 使用 Callable 接口

public class MyCallable implements Callable<Integer> {
    @Override
    public Integer call() {
        int sum = 0;
        for (int i = 0; i < 100; i++) {
            sum += i;
        }
        return sum;
    }
}
public class ThreadDemo {
    public static void main(String[] args) throws Exception {
        MyCallable mc = new MyCallable();

        FutureTask<Integer> futureTask = new FutureTask<>(mc);
        Thread t1 = new Thread(futureTask);
        t1.start();

        // 获取线程执行结果
        try {
            Integer result = futureTask.get();
            System.out.println("result = " + result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

四、线程的生命周期

状态说明
NEW(新建)线程被创建,但未调用 start()
RUNNABLE(可运行)线程调用 start() 后,可能正在运行,也可能在等待 CPU 调度
BLOCKED(阻塞)线程等待获取锁,未能成功获取,进入阻塞状态
WAITING(无限等待)线程调用 wait() 或 join(),需要其他线程显式唤醒
TIMED_WAITING(限时等待)线程调用 sleep()、wait(timeout),等待超时后自动恢复
TERMINATED(终止)线程执行完毕或发生异常,彻底结束

五、线程常用方法解析

方法作用影响
sleep(long millis)让当前线程休眠指定时间线程进入 TIMED_WAITING 状态
yield()让出 CPU 资源,回到就绪状态线程从 RUNNING 进入 RUNNABLE
join()等待该线程执行完毕调用线程进入 WAITING 状态
setDaemon(true)设置守护线程线程随主线程结束而结束
currentThread()获取当前执行线程返回当前线程对象
start()启动线程,进入就绪状态线程进入 RUNNABLE
run()线程的执行逻辑只是普通方法调用,不启动新线程
wait()让当前线程进入等待状态,直到被唤醒线程进入 WAITING
notify()唤醒一个 wait() 的线程该线程去竞争锁,可能导致线程竞争
notifyAll()唤醒所有 wait() 的线程避免线程被永久阻塞
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值