Thread

线程对象,threads.start()返回的对象,用于获取和控制线程的状态,与其他线程交互等。

Thread 对象提供了和 timers 模块一样的 API,例如setTimeout(), setInterval()等,用于在该线程执行相应的定时回调,从而使线程之间可以直接交互。例如:

1var thread = threads.start(function () {
2    //在子线程执行的定时器
3    setInterval(function () {
4        log("子线程:" + threads.currentThread());
5    }, 1000);
6});
7
8log("当前线程为主线程:" + threads.currentThread());
9
10//等待子线程启动
11thread.waitFor();
12//在子线程执行的定时器
13thread.setTimeout(function () {
14    //这段代码会在子线程执行
15    log("当前线程为子线程:" + threads.currentThread());
16}, 2000);
17
18sleep(30 * 1000);
19thread.interrupt();

Thread.interrupt()

中断线程运行。

Thread.join([timeout])

  • timeout {number} 等待时间,单位毫秒

等待线程执行完成。如果 timeout 为 0,则会一直等待直至该线程执行完成;否则最多等待 timeout 毫秒的时间。

例如:

1var sum = 0;
2//启动子线程计算1加到10000
3var thread = threads.start(function () {
4    for (var i = 0; i < 10000; i++) {
5        sum += i;
6    }
7});
8//等待该线程完成
9thread.join();
10toast("sum = " + sum);

Thread.isAlive()

  • 返回 {boolean}

返回线程是否存活。如果线程仍未开始或已经结束,返回false; 如果线程已经开始或者正在运行中,返回true

Thread.waitFor()

等待线程开始执行。调用threads.start()以后线程仍然需要一定时间才能开始执行,因此调用此函数会等待线程开始执行;如果线程已经处于执行状态则立即返回。

1var thread = threads.start(function () {
2    //do something
3});
4thread.waitFor();
5thread.setTimeout(function () {
6    //do something
7}, 1000);

Thread.setTimeout(callback, delay[, ...args])

参见timers.setTimeout

区别在于, 该定时器会在该线程执行。如果当前线程仍未开始执行或已经执行结束,则抛出IllegalStateException

1log("当前线程(主线程):" + threads.currentThread());
2
3var thread = threads.start(function () {
4    //设置一个空的定时来保持线程的运行状态
5    setInterval(function () {}, 1000);
6});
7
8sleep(1000);
9thread.setTimeout(function () {
10    log("当前线程(子线程):" + threads.currentThread());
11    exit();
12}, 1000);

Thread.setInterval(callback, delay[, ...args])

参见timers.setInterval()

区别在于, 该定时器会在该线程执行。如果当前线程仍未开始执行或已经执行结束,则抛出IllegalStateException

Thread.setImmediate(callback[, ...args])

参见timers.setImmediate

区别在于, 该定时器会在该线程执行。如果当前线程仍未开始执行或已经执行结束,则抛出IllegalStateException

Thread.clearInterval(id)

参见timers.clearInterval()

区别在于, 该定时器会在该线程执行。如果当前线程仍未开始执行或已经执行结束,则抛出IllegalStateException

Thread.clearTimeout(id)

参见timers.clearTimeout()

区别在于, 该定时器会在该线程执行。如果当前线程仍未开始执行或已经执行结束,则抛出IllegalStateException

Thread.clearImmediate(id)

参见timers.clearImmediate()

区别在于, 该定时器会在该线程执行。如果当前线程仍未开始执行或已经执行结束,则抛出IllegalStateException