线程安全-同步锁
在多个线程同时对一个数据进行操作的情况下,产生数据的安全
被多个线程共同操作的数据称之为共享数据/共享资源
可以使用同步机制解决线程安全问题
关键字: synchronized
-
将整个指定的语句块做为一个不可分割的整体来执行
-
可以修饰方法
-
也可以修饰语句块
synchoized(Object){
需要同步实现的语句块
}
每一个对象都有一个对象锁标记
生产者与消费者问题
生产者线程只负责生产数据
消费者线程只负责消耗数据
生产者不停地生产(随机数表示)
消费者不停消费(随机数表示)
定义一个类(共享资源)
当消费的数量大于已生产的数量时, 让消费者线程暂停, 生产者线程继续
Object
wait(): 让当前线程进入等待状态
notify(): 通知/唤醒因为调用wait方法进入等待状态的线程
线程完整状态
- 创建
- 就绪
阻塞、等待池、对象锁池 - 运行
- 结束
N个线程:线程池
- 实现线程方式:
-
实现 Runnable 接口, 重写 run() 方法
-
继承 Thread 父类
-
实现 Callable 接口, 重写 call() 方法
– 可以有返回值
– 可以声明抛出异常
-