和前篇文章一样的目的,测试结果也差不多,不过java中的条件变量效率略高于boost,结果是每秒大概20w出头。
===================================================================================
package com.cc;
public class Test {
static boolean running_flag = true;
static Object obj = new Object();
static int cnt = 0;
static boolean ball = true;
private static class Run1 implements Runnable {
public Run1(){}
public void run() {
int i = 0;
while(running_flag){
synchronized(obj)
{
while (ball != true && running_flag){
try {
obj.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
++i;
++cnt;
if (running_flag){
ball = false;
obj.notifyAll();
}
}
}
synchronized(obj)
{
System.out.println(i);
}
}
}
private static class Run2 implements Runnable {
public Run2(){}
public void run() {
int i = 0;
while(running_flag){
synchronized(obj)
{
while (ball != false && running_flag){
try {
obj.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
++i;
++cnt;
if (running_flag){
ball = true;
obj.notifyAll();
}
}
}
synchronized(obj)
{
System.out.println(i);
}
}
}
public static void main(String[] args) throws InterruptedException {
Thread thread1 = new Thread(new Run1());
Thread thread2 = new Thread(new Run2());
thread1.start();
thread2.start();
Thread.sleep(1000);
running_flag = false;
synchronized(obj)
{
obj.notifyAll();
}
thread1.join();
thread2.join();
System.out.println(cnt);
}
}
========================================================================