您的位置:首页 > 编程语言 > Java开发

Java多线程安全的实现

2018-02-07 16:24 316 查看
多线程的安全1.锁对象reenTranLockclass X {
private static final ReentrantLock lock = new ReentrantLock();

// 其他变量的定义

public void m() {
lock.lock(); // 当试图获得锁时,如果锁已经被别的线程占有,那么该线程会一直被阻塞,直到获得锁
try {
// 处理数据
} finally {
lock.unlock(); //释放锁
}
}
}1.1临界区:需要线程安全的区域
  Condition Java中提供了条件对象,Condition类,来配合ReentrantLock实现对临界区的控制。
public class X {

private ReentrantLock lock = new ReentrantLock();
private Condition condition;

public X() {

condition = lock.newCondition();
}

public void transfer(int from, int to, double amount) {
lock.lock();
try {
/*
* 当达到条件时
* await()会阻塞线程,并释放线程保持的锁,这时其他的线程就可以进入临界区
* signalAll()方法唤醒所有因为不满足条件而等待的线程,但是线程不一定能够继续向下执行
* */
while (//条件)
condition.await();

condition.signalAll();
} catch (Exception e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}2.synchronized关键字修饰方法public class X {
public synchronized void test1(){

}
public void test2(){
synchronized(this){

}
}

}
3.volatile关键字volatile修饰:  第一:使用volatile关键字会强制将修改的值立即写入主存;  第二:使用volatile关键字的话,当线程2进行修改时,会导致线程1的工作内存中缓存变量stop的缓存行无效;  第三:由于线程1的工作内存中缓存变量stop的缓存行无效,所以线程1再次读取变量stop的值时会去主存读取。4.线程的状态


4.线程的状态
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: