首页 > 编程知识 正文

荧光定量PCR测基因表达量,java实现加减乘除

时间:2023-05-03 19:27:35 阅读:146378 作者:1839

我在写原子积分器和原子布尔的单元测试。 它们用作参考测试并在中使用

objective-c测试这些类的模拟并将其用于翻译项目。

我觉得自动整合器的测试很好。 主要通过在大量for循环中执行可预测数量的增量、减量、加法和减法操作,每个循环都在自己的线程上执行(每种操作类型都有很多线程)。 实际操作使用CountDownLatch同时开始。

所有线程完成后,通过将原子整数与预期的整数值进行比较来断言。 根据线程数,每次线程的迭代次数和每次迭代的预期变动。 这个测试通过了。

但是如何测试自动布尔呢? 因为基本操作是get和set,所以在许多线程中多次调用并期望最终结果为true或false似乎没有意义。 我想的方向是使用始终具有相反值的自动布尔。 这样:

@Test

public void测试属性() throws Exception { )。

//====SETUP====

finalatomicbooleanbooleana=newatomicboolean (true;

finalatomicbooleanbooleanb=newatomicboolean (false;

final int threadCount=50;

finalintiterationsperthread=5000;

finalcountdownlatchstartsignallatch=newcountdownlatch (1;

finalcountdownlatchthreadsfinishedlatch=newcountdownlatch (thread count );

finalatomicbooleanassertfailed=newatomicboolean (false;

//====execute : startall threads===

for(intI=0; i threadCount; I ) {

//====Create the thread=====

AtomicOperationsThread thread;

thread=newatomicoperationsthread (' thread # ' I,booleanA,booleanB,startSignalLatch,threadsFinishedLatch,iteration

system.out.println (creating thread # ' I );

//===startthethread (eachthreadwillwaituntilthestartsignallatchistriggered (=====)

thread.start (;

}

startSignalLatch.countDown (;

//===verify : thattheatomicintegerhastheexpectedvalueafterallthreadshavefinished==

final boolean allThreadsFinished;

allthreadsfinished=threadsfinishedlatch.await (60,TimeUnit.SECONDS );

资产真(notallthreadshavefinishedbeforereachingthetimeout )、allThreadsFinished );

资产故障(资产故障. get ) );

}

私有身份证明

//##### Instance variables #####

私有财务计数下载服务启动信令;

privatefinalcountdownlatchthreadsfinishedlatch;

私有财务中断;

私有金融工具;

私有金融服务失败;

//##### Constructor #####

privateatomicoperationsthread (finalstringname,final AtomicBoolean booleanA,final AtomicBoolean booleanB, finalcountdownlatch finalcountdownlatchthreadsfinishedlatch,final int iterations,final AtomicBoolean assertFailed ) {

超级用户(name;

this.booleanA=booleanA;

this.booleanB=booleanB;

this.startsignallatch=startsignallatch;

this.threadsfinishedlatch=threadsfinishedlatch;

this.iterations=iterations;

this.assertFailed=assertFailed;

}

//# # # # # thread implementation # # # # #

@Override

公共void run (}

super.run (;

//====waitforthesignaltostart (soallthreadsareexecutedsimultaneously )=====

try {

system.out.println (this.getname (' has started.awaitingstartsignal.' );

startSignalLatch.await (;/* awaiting开始信号* /

} catch (互联互通) )

thrownewruntimeexception (' thestartsignallatchgotinterrupted.',e );

}

//====performtheatomicoperations====

for(intI=0; I隔离; I ) {

final boolean booleanAChanged;

booleanachanged=booleana.compareandset (! booleanB.get (,Booleanb.getandset ) booleanB.get );/* setatothecurrentvalueofbifaiscurrentlytheoppositeofb,then set B to the current value of A */

if (! 布尔交换) {

资产故障. set (true;

system.out.println (assertfailedinthread : ) this.getname );

}

}

//====温柔的星月this thread as finished=====

threadsFinishedLatch.countDown (;

}

}

这适用于一个线程,但失败了多个。我想这是因为booleanachanged=booleana.compareandset ()! booleanB.get (,Booleanb.getandset ) booleanB.get ); 不是原子操作。

你有什么建议?

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。