使用Jmeter进行并发定制并发测试的时候,必须要考虑到线程的安全性。测试中的每个线程是不是都要有自己的独立变量,如果不进行控制就会产生多个线程 *** 作同一个变量的情况,尤其是在定制测试中具有连接性质的对象时候,就会产生无法预见的后果。我这里的情况就是写好的Jmeter定制函数,单线程运行的时候一切正常,一旦并发就会报各种交易失败。
问题解决上一篇总结中使用protected修饰的类变量,在同一个包不同的类中直接使用,非常方便。不过简单的protected修饰变量就会出现多个线程使用同一个变量的问题,仍然解决不了问题。这时候就要用到ThreadLocal,在每个线程中都建立自己进程内的局部变量,这样就能保证每个进程有自己的连接对象了。
创建线程局部变量Bp_local,并声明变量类型为Bp_Target。这是在创建进程的时候在线程对象中预留一块内存保存Bp_Target型变量。
public class test{
protected static ThreadLocal
Bp_local=new Threadlocal<>(); public void init(){
Bp_Target BP=new Bp_Target();
Bp_local.set(BP);
}
}
执行init()后,先正常生成的Bp_Target型变量BP,然后通过set方法把这个变量保存在预留的内存中。
如何使用这个变量?通过以下方法:
test.Bp_local.get();
这样就可以在别的函数中直接使用该线程中自己的变量了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)