如何将值设置为 class 中的私有变量,其中 class 构造函数本身启动线程?

How to set values to private variable in class where class constructor itself starting the thread?

下面是我的源代码 class 其中 class 构造函数在 运行() 中启动 thread.But 它正在检查 [=21= 的非空值] 为了测试使用 junit 变量不应该为空。

public class MainClass extends Thread {
    private SomeQue que;
    private static final String THREAD_NAME = "s_thread";
    private boolean isRunning = false;

    public MainClass () {
        setName(THREAD_NAME);
        setIsRunning(true);
        start();
    }

    public void run() {
        while (isRunning()) {
            if (que!= null) {
                obj = que.pop();
                if (obj != null) {
                    //....
                }
            }
        }
    }
}

如果使用

ReflectioinTerstUtils.setField(new MainClass(),"que",que);      

我们必须创建对象以将数据设置为变量,同时创建对象本身线程正在获得 started.So 任何想法..

我看到的解决这个问题的唯一方法(除了重构)是在不调用构造函数的情况下创建对象的实例。这可以使用内部 class sun.misc.Unsafe 来完成:

注意:这个 class 的名字告诉你它有多么强大(和致命)。拥有权利的同时也被赋予了重大的责任。明智地使用。

// Obtain the unsafe object without throwing a SecurityException (assuming no security manager)
Field field = Unsafe.class.getDeclaredField("theUnsafe");
field.setAccessible(true);
Unsafe unsafe = (Unsafe) field.get(null);

// Create the instance 
MainClass instance = (MainClass) unsafe.allocateInstance(MainClass.class); // Constructor is not called

// set isRunning if needed
// do junit stuff