和前篇文章一样的目的,测试结果也差不多,不过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);
}
}
========================================================================