复习{
多线程:
1.一个线程执行 一个任务,任何和任务之间执行相互不干扰 , 迅雷下载
2.多个线程共享一个资源, 小朋友抢苹果,资源的竞争问题,必须加
同步锁 synchronized
1.同步代码块儿
synchronized(this){ this就代表锁的 标记 ,线程必须 去抢这个
锁的标记,谁抢到了,谁就执行当前的 线程体,
在一个时间段内,只允许一个线程持有该 锁的标记
}
2.同步方法 这个最常用
public synchronized void eat(){
}
死锁问题: 什么是死锁?
死锁是我们在使用synchronized关键字,完成同步操作的时候
对synchronized使用不当,导致程序无法正常向下执行的一种
现象;
哲学家就餐问题: 我们是正常编写了一个程序,保证三个哲学家都能就餐
也编写了死锁程序;
================================================================
线程之间的通讯:
4.生产者与消费者模式
只有线程和线程之间 在相互通知的情况下程序才能正常执行
在这个案例中我们会使用Object类的方法:
1.wait(); 等待
wait(long m);
2.notify(); 通知
3.notifyAll(); 通知所有
Cooker extends Thread: 厨师生产面包
Saler extends Thread: 售卖面包
Shop: 商店
生产面包 make()
售卖面包 sale()
学习的是线程之间通讯的原理, 掌握线程和线程之间是如何通讯的?
notify();
notifyAll();
wait();
sleep方法和 wait方法的区别:
1.sleep方法 是 Thread 类的
wait方法是 Object类的
2.wait方法必须放在同步锁中使用
sleep方法在什么情况下都可以
3.wait方法必须通过notify ,notifyAll唤醒
才能继续执行,不能自动释放
sleep方法 当时间片结束,自动释放
4.wait是让线程进入等待池,通过notify 进入到锁池
去抢锁标记
sleep方法是让线程进入阻塞状态,自动释放回到就绪
必须掌握线程生命周期图;
}