- 线程同步
- 如果涉及到两个或者多个线程操作同一个资源时,有可产生问题。
- 同步是指如果有多个线程操作同一个资源,需要等到一个线程结束对资源的操作之后,下个线程才能操作,要始终保证在同一时刻只能有一个线程操作这个资源。
- 注意:所谓操作,是指至少有一个线程修改或者删除资源。如果多个线程只是读同一个资源,谁也不改,则不需要同步。
- 线程同步
- 使用synchronized关键字来同步,主要有两种方式:
- synchronized(obj) {
- //代码块
- }
- synchronized(obj) {
- synchronized修饰一个方法,表示该方法在同一时刻只能被一个线程来调用。
- synchronized 加在权限修饰符与返回值之间
- 两种方法的优缺点
- 修饰方法:优点是可以明确的知道哪些方法是同步方法,缺点是如果只是方法体中一小部分代码需要同步,那其他不需要同步的代码也被同步了。
- 修饰代码块:优点只针对需要同步的代码块进行锁定,缺点是不能知道哪些方法是同步方法。
- 使用synchronized关键字来同步,主要有两种方式:
- wait notify与notifyAll
- wait() 使当前线程进入堵塞状态,前提是获得锁,一般配合synchronized使用
- notify() 唤醒一个锁对象上的等待的线程,并执行。
- notifyAll() 唤醒锁对象上的所有等待的线程,并执行。
- join方法
- 一个线程等待另一个线程执行结束,可以使用join方法
- 在线程A中使用另一个线程对象b.join(),表示线程A执行到该行代码时,开始等待,等待到线程b执行完成然后才继续执行A线程。
- 一个线程等待另一个线程执行结束,可以使用join方法
- 死锁 两个或者多个线程都在等待对方的锁对象,造成了死锁状态。
第15天0313JavaSE 线程同步
最新推荐文章于 2023-03-07 00:08:20 发布