一.JDK5以后的针对线程的锁定操作和释放操作.
同步的弊端:
A:效率低
B:容易产生死锁
二.死锁问题的描述
两个或者两个以上的线程在争夺资源过程中,发生的一种互相等待的现象.
三.生产者和消费者多线程的体现
举例 :
资源类;
设置数据(生产者);
获取数据(消费者);
加锁:
A:生产者和消费和都要加锁;
B:必须是同一把锁;
等待唤醒思路:
A:生产者:
先看有没有数据,有就等待,没有就生产,生产完之后通知消费者来消费数据.
B:消费者:
先看有没有数据,有就消费,没有就等待,通知生产者生产.
等待唤醒方法:
wait();等待.
notify();唤醒单个线程.
notifyAll();唤醒所有线程.
这些方法必须通过锁对象调用.
四.线程组
把多个线程放到一个组里.这样比较方法操作整个组的线程.
代码举例:
五.线程池
线程池的好处:线程池里的每一个线程代码结束后,并不会死亡,而是再次回到线程池中成为空闲状态,等待下一个对象来使用.
实现线程池的步骤:
A:创建一个线程池对象,控制需要创建几个线程对象.
public static ExxcutorService newFixedThreadPool(int nThreads);
B:这种线程池的线程可以执行:
Runnable对象或者Callable对象代表的线程
做一个类实现Runnable接口.
C:调用如下方法即可.
submit(Runnable task);
代码举例:
六.线程常见情况
* A:新建--就绪--运行--死亡
* B:新建--就绪--运行--就绪--运行--死亡
* C:新建--就绪--运行--其他阻塞--就绪--运行--死亡
* D:新建--就绪--运行--同步阻塞--就绪--运行--死亡
* E:新建--就绪--运行--等待阻塞--同步阻塞阻塞--就绪--运行--死亡