黑马程序员技术交流社区
标题:
多线程互斥锁的使用
[打印本页]
作者:
ylca
时间:
2016-7-14 18:19
标题:
多线程互斥锁的使用
public static void main(String[] args) {
//创建对象
final MyPrinter p = new MyPrinter();
//创建线程对象
new Thread(){
public void run() {
//循环执行
while(true){
try {
p.print1();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}.start();
new Thread(){
public void run() {
//循环执行
while(true){
try {
p.print2();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}.start();
new Thread(){
public void run() {
//循环执行
while(true){
try {
p.print3();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}.start();
}
}
class MyPrinter {
ReentrantLock r = new ReentrantLock(); //获取互斥锁对象 跟syn同步代码块
Condition c1 = r.newCondition(); //获取等待跟唤醒功能
Condition c2 = r.newCondition();
Condition c3 = r.newCondition();
private int t =1;
public void print1() throws InterruptedException{
r.lock(); //获取锁 跟synchronized 类似
if(t!=1){
c1.await();
}
System.out.println("11111");
t=2;
c2.signal(); //唤醒线程
r.unlock(); //释放锁
}
public void print2() throws InterruptedException{
r.lock();
if(t!=2){
c2.await(); //线程等待
}
System.out.println("222222");
t=3;
c3.signal(); //唤醒线程
r.unlock(); //释放锁
}
public void print3() throws InterruptedException{
r.lock();
if(t!=3){
c3.await();//线程等待
}
System.out.println("3333333");
t=1;
c1.signal(); //唤醒线程
r.unlock(); //释放锁
}
复制代码
作者:
anyeyyc
时间:
2016-7-14 21:25
学习学习
作者:
丹唯伯夷
时间:
2016-7-18 07:33
线程这一部分的知识点还是挺多的
作者:
q123123
时间:
2016-7-18 17:22
看看 学习学习
作者:
犁地的拖拉机
时间:
2016-7-18 22:19
不错,总结到位
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2