java多线程(三)
1.1什么的多线程的安全问题?
多个线程对共享资源进行访问时,引起共享资源不一致的问题。
1.2一般解决多线程安全问题的解决方案有哪些?
1.2.1 同步方法
public synchronized void run() {
....
}
1.2.2 同步代码块,这里需要传入一个对象作为锁,一般情况下会选择共享资源作为对象。
@Override
public void run() {
synchronized(account){
.....
}
}
1.2.3 Lock对象同步锁
....
private final Lock lock = new ReentrantLock();//定义一个锁对象
public void run() {
//加锁
lock.lock();
....
//解锁
lock.unlock();
}
1.3 wait()/notify()/notifyAll()线程通信
以上三个方法主要用于多线程里,但其实这3个方法都是Object类中的本地方法。Object是所以类的超类,所以任何的Object都可以以这三个方法作为主调。但是仅仅是同步锁对象调用这三个方法,才能完成多线程之间线程的通信。
wait():当线程执行wait()方法,则线程进入阻塞状态,直到被唤醒为止。
notify()/notifyAll():可以唤醒一个或者所有的线程对象,由于此时同步锁还没有释放,如果notify()/notifyAll()还有代码,还会执行。
posted on 2017-02-04 02:54 lukelin1989 阅读(143) 评论(0) 编辑 收藏 举报