Java中条件变量使用示例及性能测试

本文对比了Java和boost库在实现条件变量时的性能表现,结果显示Java中的条件变量在每秒处理数量上略胜一筹。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

}
========================================================================
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值