
正文
java锁的使用实例代码,java中的各种锁详细介绍
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
如何使用java的锁机制
可以在临界区代码开始的位置执行Lock类的lock方法,为代码块加锁,而在临界区的出口使用相同Lock实例的unlock方法,释放临界区资源。
Demo2-12中,主线程先创建了一个lockTest对象test,然后将相同的test对象交给两个不同的线程执行。子线程1获取到了lock后,开始执行before sleep输出语句,遇到sleep后,线程1阻塞将会放弃执行权,这时线程2可以获取执行权,当线程2执行lock方法时,发现锁已经被别的线程获取,所以线程2阻塞等待lock的释放。线程1从sleep中被唤醒后,将继续执行after sleep语句,之后释放了锁,此时线程2从锁等待中被唤醒,执行临近区的内容,因此Demo2-12的输出是先线程1的两条语句,之后才输出线程2的两条语句。而Demo2-13在没有锁的保护下,程序无法保证先将线程1的两条语句输出后再执行线程2的输出,因此,Demo2-13的输出结果是交叉的。
相关问答
Q1: java中 请问我应该如何如何锁这段代码才符合要求
public Object getObject(String key,Object o) {
synchronized (map) {
if(map.get(key)==null) {
map.put(key,o)
}else {
return map.get(key);
}}// 格式没法弄,自己弄一下
}
// demol0326 的回答意思使用MyTest的实例来加锁,但是map是static的,无法锁住
// MyTest的多个实例在多个线程中的请求
//禾木双子 :如果A线程在getObject方法的第二行停止,此时B线程进入getObject后执行部分代码, 此时B线程停止,A线程启动,他不会执行'多线程处理', 仍然有线程线程安全问题,(想像一下更多的线程进入该方法的情况,num甚至会得到负值)
Q2: 急求!!用Java程序模拟该电子门锁,只要完整代码。
实现UI界面吗?
用一个VECTOR保存密码,程序下次运行不就又不可以了吗?
package chen.util.algorithm;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Vector;
public class Test2 {
public static void main(String[] args) throws IOException {
VectorString v = new VectorString(1);
v.add(0, "123"); // 设置出示密码
// 利用控制台来设置我们需要打印的值。
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 程序要一直执行。如果程序重新运行就会把密码更改为123。建议你吧密码保存到本地文件或者数据库。
while(true){
String mima;
mima = br.readLine();
System.out.println("更改密码请输入321");
// 用户更改密码
if(mima.equals("321")){
String mima1 = br.readLine();
v.add(0, mima1);
}
// 密码正确后执行
if(mima.equals(v.get(0))){
System.out.println("正确");
}
// 初始密码 123
if(mima.equals(v.get(0))){
System.out.println("用户使用初始化密码进入系统");
}
}
}
}
Q3: 如何在Java中使用双重检查锁实现单例
public Singleton {
private Singleton instance;
private Singleton() {} // 构造器私有化
public static Singleton getInstance() {
if (instance == null) { // 第一次检查不加锁
synchronized(Singleton.class) { // 加锁
if (instance == null) { // 第二次检查是在加锁的情况下
instance = new Singleton();
}
}
}
return instance;
}
}







