java多线程操作是通过synchronized来处理同步问题:
synchronized 方法
synchronized 静态方法
synchronized 代码段
synchronized 锁住的是对象,而不是函数、代码段
说明:synchronized关键字是不能继承的
注意synchronized与wait()、notify()、notifyAll()的关系
private static byte[] mLocker = new byte[0];
线程1:
do some work 1
. . . . . .
//本线程开始wait
synchronized (mLocker) {
try {
//释放锁同时休眠本线程。
mLocker.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
do next work 1
. . . . . .
线程2:
do some work 2
. . . . . .
synchronized (mLocker) {
//通知线程1不要阻塞了,继续执行吧,需要注意的是执行notify()后并不马上释放对象锁,而是在此synchronized的代码块执行完了以后才会释放锁
mLocker.notify();
. . . . . .
. . . . . .
}