锁
在多线程中存在着多个线程交替运行的过程中,如果出现需要某个线程暂停或者暂停后重新启动,那么就要运用到wait()以及notify(),但在此之前我们先要了解一个锁的概念,只有被锁标记的对象或者方法才能运用到锁。
锁的创建:
对一个对象加锁:
objc o = new objc
synchronized (o){
}
对一个方法加锁在之public 之前添加一个synchronized就行:
synchronized public void a(){
}
wait()
介绍完锁之后我们就来说说锁的用法,wait()用于停止当前进程,但是wait()方法以及notify()方法都必须写在synchronized 块内:
objc o = new objc
synchronized (o){
o.wait()
}
如果o一个线程o.wait()不是停止o这个线程而是停止o.wait所在的线程。
notify()
有暂停就有开始,notify就是用于开始同以对象中所锁住的一个进程,notifyAll是解开所有,也就是说只要synchronized 后的对象是一样在其他的类也可以打开其他类的当前对象的锁。
objc o = new objc;
Thread a = new Thread();
public void run(){
synchronized (o){
o.wait();
}
}
Thread b = new Thread();
public void run(){
synchronized (o){
o.notify();
}
}
通过b线程中的run也是能对a中的wait解锁的。