Java addShutdownHook方法

时间:2016-07-15 12:27:21

标签: java multithreading

我有以下代码:

public static void main(String[] args) throws InterruptedException {
        int [] intArray = new int[500]; 
        SomeThread t1 = new SomeThread(intArray,0,99,1);
        SomeThread t2 = new SomeThread(intArray,100,200,2); 
            t1.run();
            System.exit(0);

            Thread hook = new Thread(){
                public void run(){
                    if(!t1.isReady){
                        t1.run();
                    }
                    else if(!t2.isReady){
                        System.out.println("Code reached here ------");
                        t2.run();
                    }
                }
            };
            Runtime.getRuntime().addShutdownHook(hook);
          }

基本上我有一个由两个不同线程操纵的数组。在线程内部有一个布尔变量isReady,用于检查线程是否已正确完成其工作。我故意没有启动第二个线程,只是检查它是否会在System.exit()之后执行,但代码永远不会到达那里。我只想在关闭JVM之前运行第二个线程。我还将System.exit()用于测试应用程序是否会在关闭之前执行某些操作。

更新:问题是为什么代码永远不会到达第二个if语句,我检查了isReady变量是false:/

1 个答案:

答案 0 :(得分:1)

在调用Traceback (most recent call last): File "/usr/bin/py.test", line 9, in <module> load_entry_point('pytest==2.7.0', 'console_scripts', 'py.test-2.7')() File "/usr/lib/python2.7/site-packages/_pytest/config.py", line 32, in main config = _prepareconfig(args, plugins) File "/usr/lib/python2.7/site-packages/_pytest/config.py", line 85, in _prepareconfig pluginmanager=pluginmanager, args=args) File "/usr/lib/python2.7/site-packages/_pytest/core.py", line 521, in __call__ return self._docall(self.methods, kwargs) File "/usr/lib/python2.7/site-packages/_pytest/core.py", line 528, in _docall firstresult=self.firstresult).execute() File "/usr/lib/python2.7/site-packages/_pytest/core.py", line 393, in execute return wrapped_call(method(*args), self.execute) File "/usr/lib/python2.7/site-packages/_pytest/core.py", line 109, in wrapped_call wrap_controller.send(call_outcome) File "/usr/lib/python2.7/site-packages/_pytest/helpconfig.py", line 28, in pytest_cmdline_parse config = outcome.get_result() File "/usr/lib/python2.7/site-packages/_pytest/core.py", line 138, in get_result py.builtin._reraise(*ex) File "/usr/lib/python2.7/site-packages/_pytest/core.py", line 123, in __init__ self.result = func() File "/usr/lib/python2.7/site-packages/_pytest/core.py", line 394, in execute res = method(*args) File "/usr/lib/python2.7/site-packages/_pytest/config.py", line 636, in pytest_cmdline_parse self.parse(args) File "/usr/lib/python2.7/site-packages/_pytest/config.py", line 746, in parse self._preparse(args) File "/usr/lib/python2.7/site-packages/_pytest/config.py", line 713, in _preparse self.pluginmanager.consider_setuptools_entrypoints() File "/usr/lib/python2.7/site-packages/_pytest/core.py", line 282, in consider_setuptools_entrypoints self.register(plugin, name=name) File "/usr/lib/python2.7/site-packages/_pytest/core.py", line 189, in register reg(plugin, name) # may call addhooks File "/usr/lib/python2.7/site-packages/_pytest/config.py", line 604, in _register_plugin {'pluginmanager': self.pluginmanager}) File "/usr/lib/python2.7/site-packages/_pytest/core.py", line 360, in call_plugin kwargs=kwargs, firstresult=True).execute() File "/usr/lib/python2.7/site-packages/_pytest/core.py", line 394, in execute res = method(*args) File "/home/marlu/.local/lib/python2.7/site-packages/pytest_bdd-2.17.0-py2.7.egg/pytest_bdd/plugin.py", line 15, in pytest_addhooks from pytest_bdd import hooks File "/home/marlu/.local/lib/python2.7/site-packages/pytest_bdd-2.17.0-py2.7.egg/pytest_bdd/hooks.py", line 38, in <module> @pytest.hookspec(firstresult=True) AttributeError: 'module' object has no attribute 'hookspec' 之前,您必须注册挂钩。现在编写代码的方式,实际上永远不会评估设置钩子的部分。