合理的使用Java 多线程可以更好地利用服务器资源,我们有时候需要线程之间的相互协作的时候,就需要掌握Java 线程的通信方式。
锁与同步
在Java 中,锁的概念都是基于对象的,所以我们又经常称他为对象锁。一个锁同一时间只能被一个线程持有,其他线程如果需要得到这个锁,就得等这个线程释放锁。
线程同步是线程之间按照 一定的顺序执行
public class ObjectLock {private static Object lock = new Object();static class ThreadA implements Runnable{@Overridepublic void run() {synchronized (lock) {for (int i = 0; i < 100; i++) {System.out.println("threadA" + i);}}}}static class ThreadB implements Runnable{@Overridepublic void run() {synchronized (lock) {for (int i = 0; i < 100; i++) {System.out.println("threadA" + i);}}}}public static void main(String[] args) throws InterruptedException {new Thread(new ThreadA()).start();//防止线程B先得到锁Thread.sleep(10);new Thread(new ThreadB()).start();}}
根据线程和锁的关系,同一时间只有一个线程持有一个锁,那么线程B 就会等线程A执行完成后释放 lock ,线程B 才能获得 lock.
基于锁的方式,线程需要不断地去尝试获得锁,如果失败了,在继续尝试,这可能会耗费服务器资源。
等待/ 通知机制
Java 多线程等待/ 通知机制是基于 Object 类的 wait() 方法和 notify() , notifyAll() 方法实现的。
