我怎么能使用Jython线程,因为它们是Java线程?

时间:2012-07-12 20:41:39

标签: java multithreading jython

例如,我想在Jython中重现这个Thread,因为我需要从Java API启动我的 statemachine 。我在Jython中没有太多的知识。我怎样才能做到这一点?

Thread thread = new Thread() {
    @Override
    public void run() {
        statemachine.enter();
        while (!isInterrupted()) {
            statemachine.getInterfaceNew64().getVarMessage();
            statemachine.runCycle();
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                interrupt();
            }
       }            
    }
};
thread.start();

所以我正在尝试这样的事情:

class Cycle(Thread, widgets.Listener):
    def run(self):
        self.statemachine = New64CycleBasedStatemachine()
        self.statemachine.enter()
        while not self.currentThread().isInterrupted():
            self.statemachine.getInterfaceNew64().getVarMessage()
            self.statemachine.runCycle()
            try: 
                self.currentThread().sleep(100)
            except InterruptedException: 
                self.interrupt()
        self.start()

foo = Cycle()
foo.run()
#foo.start() 

PS:我已经尝试过做foo.run()

下的评论

我做错了什么?

1 个答案:

答案 0 :(得分:2)

好吧,撇开你在start()方法中调用run()方法的事实,这是一个非常糟糕的主意,因为一旦线程启动,如果你再次尝试启动它你会得到一个线程状态异常,把它放在一边,问题很可能是你使用的是Jython线程库,而不是Java。

如果您确保按以下方式导入:

from java.lang import Thread, InterruptedException

而不是

from threading import Thread, InterruptedException

如果你纠正了我上面提到的问题,很可能你的代码运行得很好。

使用Jython的threading库,您需要稍微更改一下代码,有点像:

from threading import Thread, InterruptedException
import time

class Cycle(Thread):
    canceled = False

    def run(self):
        while not self.canceled:
            try:
                print "Hello World"
                time.sleep(1)
            except InterruptedException:
                canceled = True

if __name__ == '__main__':
    foo = Cycle()
    foo.start()

这似乎对我有用。