该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
代码如下, 我对unlock的理解是 如果不释放锁,那么别的线程即永远也得不到锁,相当于就运行不了,但是我发现把unlock() 方法注释掉也是可行的 只不过顺序会乱, 可线程还是继续运行,那释放锁的原理是什么呢 我看了api文档 可还是看不懂.
public static void main(String[] args) {
ReentrantLock lock= new ReentrantLock();
Condition condition1=lock.newCondition();
Condition condition2=lock.newCondition();
Condition condition3=lock.newCondition();
Runnable r1=new Runnable(){
public void run(){
int i=1;
while(i<10){
//调用lock方法 防止cpu随机选择线程的时候打乱顺序
lock.lock();
System.out.println("我是线程1.我是大佬,让我先来,你们都退下!!!!");
i++;
//当执行到这一步的时候唤醒 被con2锁住的线程
condition2.signalAll();
try {
//让自己出于等待状态
condition1.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
//不解锁的话
//lock.unlock();
}
}
};
Runnable r2=new Runnable() {
public void run() {
int i=1;
while(i<10){
lock.lock();
System.out.println("三弟,毕竟我是二哥,你就让我先来吧,你再等等.....");
i++;
condition3.signalAll();
try {
condition2.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
//lock.unlock();
}
}
};
Runnable r3=new Runnable() {
public void run() {
int i=0;
while(i<10){
lock.lock();
System.out.println("倚老卖老的两个家伙~~~~");
i++;
condition1.signalAll();
try {
condition3.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
//lock.unlock();
}
}
};
Thread t3= new Thread(r3);
Thread t2= new Thread(r2);
Thread t1= new Thread(r1);
t1.start();
t2.start();
t3.start();
}
这是没有注释掉 lock.unlock() 的结果
我是线程1.我是大佬,让我先来,你们都退下!!!!
三弟,毕竟我是二哥,你就让我先来吧,你再等等.....
倚老卖老的两个家伙~~~~
我是线程1.我是大佬,让我先来,你们都退下!!!!
三弟,毕竟我是二哥,你就让我先来吧,你再等等.....
倚老卖老的两个家伙~~~~
我是线程1.我是大佬,让我先来,你们都退下!!!!
三弟,毕竟我是二哥,你就让我先来吧,你再等等.....
倚老卖老的两个家伙~~~~
我是线程1.我是大佬,让我先来,你们都退下!!!!
三弟,毕竟我是二哥,你就让我先来吧,你再等等.....
倚老卖老的两个家伙~~~~
我是线程1.我是大佬,让我先来,你们都退下!!!!
三弟,毕竟我是二哥,你就让我先来吧,你再等等.....
倚老卖老的两个家伙~~~~
我是线程1.我是大佬,让我先来,你们都退下!!!!
三弟,毕竟我是二哥,你就让我先来吧,你再等等.....
倚老卖老的两个家伙~~~~
我是线程1.我是大佬,让我先来,你们都退下!!!!
三弟,毕竟我是二哥,你就让我先来吧,你再等等.....
倚老卖老的两个家伙~~~~
我是线程1.我是大佬,让我先来,你们都退下!!!!
三弟,毕竟我是二哥,你就让我先来吧,你再等等.....
倚老卖老的两个家伙~~~~
我是线程1.我是大佬,让我先来,你们都退下!!!!
三弟,毕竟我是二哥,你就让我先来吧,你再等等.....
倚老卖老的两个家伙~~~~
这是注释掉 lock.unlock() 的结果
我是线程1.我是大佬,让我先来,你们都退下!!!!
倚老卖老的两个家伙~~~~
三弟,毕竟我是二哥,你就让我先来吧,你再等等.....
我是线程1.我是大佬,让我先来,你们都退下!!!!
倚老卖老的两个家伙~~~~
三弟,毕竟我是二哥,你就让我先来吧,你再等等.....
我是线程1.我是大佬,让我先来,你们都退下!!!!
倚老卖老的两个家伙~~~~
三弟,毕竟我是二哥,你就让我先来吧,你再等等.....
我是线程1.我是大佬,让我先来,你们都退下!!!!
倚老卖老的两个家伙~~~~
三弟,毕竟我是二哥,你就让我先来吧,你再等等.....
我是线程1.我是大佬,让我先来,你们都退下!!!!
倚老卖老的两个家伙~~~~
三弟,毕竟我是二哥,你就让我先来吧,你再等等.....
我是线程1.我是大佬,让我先来,你们都退下!!!!
倚老卖老的两个家伙~~~~
三弟,毕竟我是二哥,你就让我先来吧,你再等等.....
我是线程1.我是大佬,让我先来,你们都退下!!!!
倚老卖老的两个家伙~~~~
三弟,毕竟我是二哥,你就让我先来吧,你再等等.....
我是线程1.我是大佬,让我先来,你们都退下!!!!
倚老卖老的两个家伙~~~~
三弟,毕竟我是二哥,你就让我先来吧,你再等等.....
我是线程1.我是大佬,让我先来,你们都退下!!!!
倚老卖老的两个家伙~~~~
三弟,毕竟我是二哥,你就让我先来吧,你再等等.....
我感觉差不多啊