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

多线程编程10----condition同步工具类的使用

2014-09-01 16:12 381 查看
package zhu.suo;

import java.util.concurrent.locks.Condition;

import java.util.concurrent.locks.Lock;

import java.util.concurrent.locks.ReentrantLock;

/*

* 要求:1,2,3兄弟,1循环5次,2循环10次,3循环15次,接着1循环5次。。。。依次交替10次

* 提示:

* 使用1对2的condition,2对3的condition,3对1的condition

* */

public class ConditionThreeThreadLoop {

public static void main(String[] args) {

new Thread(

new Runnable() {

@Override

public void run() {

for (int i=0;i<10;i++)

{Demo.p1(i);}

}

}

).start();

//2

new Thread(

new Runnable() {

@Override

public void run() {

for (int i=0;i<10;i++)

{Demo.p2(i);}

}

}

).start();

//3

new Thread(

new Runnable() {

@Override

public void run() {

for (int i=0;i<10;i++)

{Demo.p3(i);}

}

}

).start();

}

static class Demo{

private static int flag=1;

private static Lock lock = new ReentrantLock();

static Condition condition1 = lock.newCondition();

static Condition condition2 = lock.newCondition();

static Condition condition3 = lock.newCondition();

static void p1(int i)

{

lock.lock();

try{

while(flag!=1)

{

try {

condition1.await();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

for(int j=1;j<6;j++)

{System.out.println("老大 loop"+j+",外层:"+i);}

flag=2;

condition2.signal();//老大昨完 唤醒老二

}finally{

lock.unlock();

}

}

static void p2(int i)

{

lock.lock();

try{

while(flag!=2)

{

try {

condition2.await();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

for(int j=1;j<11;j++)

{System.out.println("老二 loop"+j+",外层:"+i);}

flag=3;

condition3.signal();//唤醒老三

}finally{

lock.unlock();

}

}

static void p3(int i)

{

lock.lock();

try{

while(flag!=3)

{

try {

condition3.await();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

for(int j=1;j<16;j++)

{System.out.println("老三 loop"+j+",外层:"+i);}

flag=1;

condition1.signal();//唤醒老大

}finally{

lock.unlock();

}

}

}

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