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()
返回线程是否存活。如果线程仍未开始或已经结束,返回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
。