《零基础学Java编程:手把手教你写出第一个可运行的程序 - 基础知识篇十一》

目录

一 . 进程与线程

1. 基本概念

2. Java中的线程实现

二、线程的创建与控制方法

1. 创建线程的三种方式

(1) 继承Thread类

(2) 实现Runnable接口

(3) 实现Callable接口(可获取返回值)

2. 线程控制方法 

三、线程同步与死锁

1. 同步的必要性

2. 死锁产生的四个必要条件

3. 死锁避免策略


一 . 进程与线程

1. 基本概念

(博哥有话说:注意进程与线程的区别)

进程(Process)

  • 操作系统资源分配的基本单位

  • 拥有独立的内存空间(堆、栈、方法区)

  • 进程间通信(IPC)成本较高(管道、消息队列、共享内存等)

线程(Thread)

  • CPU调度的基本单位

  • 共享进程的内存资源(堆、方法区),但有独立的栈空间

  • 线程间通信成本较低(可直接访问共享变量)

2. Java中的线程实现

  • 用户级线程:早期Java的"绿色线程",完全由JVM管理

  • 内核级线程:现代Java采用,1:1映射到操作系统线程

  • 提高资源利用率

  • 提高系统吞吐量

  • 改善用户体验(如GUI程序)

二、线程的创建与控制方法

1. 创建线程的三种方式

(博哥有话说:这三种基本创建线程的方法要知道)

(1) 继承Thread类

class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("Thread running");
    }
}

// 使用
new MyThread().start();

(2) 实现Runnable接口

class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("Runnable running");
    }
}

// 使用
new Thread(new MyRunnable()).start();

(3) 实现Callable接口(可获取返回值)

class MyCallable implements Callable<String> {
    @Override
    public String call() throws Exception {
        return "Callable result";
    }
}

// 使用
FutureTask<String> task = new FutureTask<>(new MyCallable());
new Thread(task).start();
System.out.println(task.get()); // 获取返回值

2. 线程控制方法 

方法说明注意
start()启动线程只能调用一次
run()线程执行体直接调用只是普通方法
sleep(long millis)线程休眠不释放锁
yield()让出CPU不一定立即生效
join()等待线程结束常用于线程协作
interrupt()中断线程只是设置标志位
setDaemon(boolean)设为守护线程需在start前调用

三、线程同步与死锁

(博哥有话说:线程的同步与死锁多在操作系统里讲述)

1. 同步的必要性

  • 解决竞态条件(Race Condition)

  • 保证可见性(一个线程的修改对其他线程可见)

  • 维护原子性(操作不可分割)

2. 死锁产生的四个必要条件

  • 互斥条件:资源一次只能被一个线程占用

  • 占有且等待:线程持有资源并等待其他资源

  • 不可抢占:资源只能由持有线程释放

  • 循环等待:多个线程形成等待环路

3. 死锁避免策略

  • 破坏占有且等待:一次性申请所有资源

  • 破坏不可抢占:设置超时尝试获取锁

  • 破坏循环等待:按固定顺序获取资源

  • 使用tryLock()尝试获取锁

  • 使用工具检测(如jstack)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

博哥爱学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值