sychronized详解
时间: 2023-06-16 20:05:05 浏览: 111
javasynchronized详解.pdf
synchronized 是 Java 中一种用于实现线程同步的关键字,它可以修饰方法和代码块。synchronized 的作用是确保在同一时刻只有一个线程可以访问共享资源,从而避免多个线程同时对该资源进行访问引起的并发问题。
当 synchronized 修饰方法时,该方法在被调用时会自动获取该对象的锁,其他线程必须等待锁被释放后才能访问该方法。当 synchronized 修饰代码块时,需要指定锁对象,只有获取该锁对象的线程才能执行该代码块。
synchronized 实现同步的原理是基于对象的锁,每个对象都有一个锁,当一个线程访问该对象时,该对象就被锁住了,其他线程无法访问该对象的同步代码块,直到该线程释放了锁才能访问。
需要注意的是,synchronized 修饰的方法或代码块只能保证同一时刻只有一个线程访问共享资源,但无法保证线程的执行顺序,因此需要使用其他机制来协调线程的执行顺序,如 wait()、notify()、notifyAll() 等方法。
另外,synchronized 在使用时需要注意以下几点:
1. 避免过度使用 synchronized,因为获取和释放锁会消耗性能,过多使用会影响程序的性能。
2. 不要在方法内使用 synchronized(this),因为该对象的锁作用范围过大,可能导致线程竞争的问题。
3. 尽量使用 synchronized 代码块而不是 synchronized 方法,因为 synchronized 方法会锁住整个对象,而 synchronized 代码块可以只锁住需要同步的代码块。
4. 避免死锁问题,即多个线程相互等待对方释放锁的情况。
阅读全文