1、synchronized
对所在的线程的方法或对象加锁,synchronized 加锁修饰的代码块或对象没有执行完,下个执行此代码块的方法或对象,被加进锁池处于等待状态,直到代码块执行完或者对象不用,下个执行才能正常执行。synchronized 比较重,要排队等待,有些场景比较耗性能,但是加锁提升了线程安全问题。
2、wait()
wait()方法是超类Object 的方法,final类型不能被修改。wait()方法使得当前线程处于等待状态,释放cpu和资源占用。wait()方法的使用需要配合synchronized一起,wait()一直处于等待状态,synchronized会被释放,直到被其他线程调用notify()或notifyAll()唤醒了,wait()方法就不继续等待了,就继续执行wait()后面的方法。
synchronized (obj){
......
wait();
Thread.sleep(5000)
.....
}
3、notify()与notifyAll()
notify()方法也是超类Object 的方法,final类型不能被修改。notify()方法唤起一个 wait()等待状态的线程,而notifyAll()方法唤起一个 wait()等待状态的多个线程,使其继续执行,继续暂用cpu和资源。。。