Потоки
Многопоточность поддерживается за счет стандартных средств Java
var Runnable = Java.type('java.lang.Runnable');
var Thread = Java.type('java.lang.Thread');
var moveX = Java.extend(Runnable, {
run: function() {
var x0 = mouse.getX();
for(var i=0;i<100;i++){
mouse.move(1,0);
}
system.println('dx='+(mouse.getX()-x0));
}
});
var moveY = new Thread(function() {
var y0 = mouse.getY();
for(var i=0;i<100;i++){
mouse.move(0,1);
}
system.println('dy='+(mouse.getY()-y0));
});
new Thread(new moveX()).start();
moveY.start();
Стоит учитывать, что все вызовы методов к объектам управления(key, mouse, system, combined, clipboard) являются синхронизированными. Это касается как потоков запущенных из скрипта так и поток под управлением HTTP и Socket серверов. Если один из потоков займет какой-то метод, даже если использует отдельный объект управления, то все методы управления не будут доступны для других потоков. Данная ситуация может произойти в случае установления большой автозадержки для объектов key и mouse, а также зависания методов объекта clipboard.
Данное ограничение не касается метода system.sleep(), так как имеет отношение исключительно к потоку. Задержка указанная через данный метод может быть любой величины.
Список несинхронизированных методов:
- combined.run()
- system.exit()
- system.sleep()