Потоки


Многопоточность поддерживается за счет стандартных средств 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(), так как имеет отношение исключительно к потоку. Задержка указанная через данный метод может быть любой величины.

Список несинхронизированных методов: