国庆节10月1日
--


嘿,你有没有试过一边下载文件、一边听歌、还顺手回了条消息?这些“同时”发生的事,背后其实是多线程在悄悄干活。它不像听起来那么吓人——说白了,就是让程序学会“分身术”。今天咱们不讲虚的,就聊聊线程怎么生、怎么活、怎么抢资源,还有为啥它一卡,整个程序就跟着发呆 😅
程序:是为完成特定任务、用某种语言编写的一组指令的集合,即我们写的静态代码。
进程:
线程:
步骤:
注意:
步骤:
原理:使用了代理模式。Thread 类本身实现了 Runnable 接口,其 run 方法会调用传入的 Runnable 对象的 run 方法。
优势:
yield() :线程的礼让。让出CPU,给其他线程执行机会,但礼让成功与否取决于CPU调度,不一定成功。
join() :线程的插队。调用此方法的线程会阻塞当前线程(如主线程),直到调用者执行完毕,当前线程才继续执行。
用户线程(工作线程) :线程任务执行完毕或通过通知方式结束。
守护线程:为工作线程服务。当所有用户线程结束时,守护线程自动结束。
JDK中 Thread.State 枚举定义了线程的六种状态:
在多线程环境下,当多个线程同时访问共享资源(如卖票系统的票数)时,可能导致数据不一致(超卖、重复卖)等问题。
保证在任一时刻,最多只有一个线程访问同步代码,确保数据完整性。
1synchronized(对象) { // 得到对象的锁才能进入2 // 需要同步的代码3}1public synchronized void method() {2 // 需要同步的代码3}每个Java对象都有一个互斥锁(Monitor Lock) 标记。
synchronized 关键字与对象的互斥锁关联。
锁对象的选择:
会释放锁:
不会释放锁:
如果你喜欢,那么欢迎来到我的世界!
了解更多暂未播放



"所有的相遇都是久别重逢。"—— 未知


