package demo;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;
/**
* Created by sunyifeng on 17/10/18.
*/
public class MyService {
private ReentrantLock lock = new ReentrantLock();
private Condition condition = lock.newCondition();
private boolean flag = false;
public void set(){
try {
lock.lock();
while (flag == true) {
condition.await();
}
System.out.println("------");
flag = true;
condition.signal();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
public void get(){
try {
lock.lock();
while (flag == false) {
condition.await();
}
System.out.println("++++++");
flag = false;
condition.signal();
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
lock.unlock();
}
}
}
package demo;
/**
* Created by sunyifeng on 17/10/18.
*/
public class ThreadA extends Thread {
private MyService myService;
public ThreadA(MyService myService) {
super();
this.myService = myService;
}
@Override
public void run() {
super.run();
for (int i = 0; i < Integer.MAX_VALUE; i++) {
myService.set();
}
}
}
package demo;
/**
* Created by sunyifeng on 17/10/18.
*/
public class ThreadB extends Thread {
private MyService myService;
public ThreadB(MyService myService) {
super();
this.myService = myService;
}
@Override
public void run() {
super.run();
for (int i = 0; i < Integer.MAX_VALUE; i++) {
myService.get();
}
}
}
package demo;
/**
* Created by sunyifeng on 17/10/18.
*/
public class Run {
public static void main(String[] args) {
MyService myService = new MyService();
ThreadA threadA = new ThreadA(myService);
threadA.start();
ThreadB threadB = new ThreadB(myService);
threadB.start();
}
}
运行结果:
。。。。。。
------
++++++
------
++++++
------
++++++
------
程序分析:
无。