hud*_*ira 6 java multithreading jython
例如,我想是因为我要开始我的重现此主题中的Jython 的statemachine从Java API.I不要自己的很多知识在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();
Run Code Online (Sandbox Code Playgroud)
所以我正在尝试这样的事情:
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()
Run Code Online (Sandbox Code Playgroud)
PS:我已经尝试做foo.run()下的评论
我究竟做错了什么?
start()
好吧,抛开您从方法内部调用该方法这一事实来说run()
,这是一个非常糟糕的主意,因为一旦启动线程,如果您尝试再次启动它,您将得到一个线程状态异常,抛开这一点,问题很可能是您使用的是 Jython 线程库而不是 Java 的。
如果您确保按如下方式导入:
from java.lang import Thread, InterruptedException
Run Code Online (Sandbox Code Playgroud)
代替
from threading import Thread, InterruptedException
Run Code Online (Sandbox Code Playgroud)
如果您纠正了我上面提到的问题,您的代码很可能会运行得很好。
使用 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()
Run Code Online (Sandbox Code Playgroud)
这似乎对我有用。