Ruby语言入门(24)- 内部类 - Thread

上一篇 / 下一篇  2013-03-18 15:17:47 / 个人分类:测试

Thread使得并行编程成为可能。线程是一种共享内存空间并可同时运行的控制流。目前Ruby解释器采用时间片轮转法来控制线程,所以使用线程后并不会提高程序的运行速度。

启动程序时生成的线程被称作主线程。若主线程因为某些原因而终止运行时,子线程和整个程序也会终止运行。发生异常时,会被送往主线程。

若启动线程时指定的块结束运行时,该线程也将终结。块的正常结束和因异常等引起的非正常结束都代表快的终结。

当线程内发生异常,而且没有被rescue捕到时,该线程会被停掉,而且不发出任何警告。如果这时有其它线程因Thread#join而等待这个线程,会在等待的线程中再次引发相同的异常。

通过下列方法可以保证在线程因发生异常而终止工作时,中断解释器:
$DEBUG的值设为真(调试模式)。用-d选项来启动ruby解释器也可以取得相同的效果。
使用Thread.abort_on_exception来设置标识。
使用Thread#abort_on_exception来设定特定线程的标识。

线程的状态
可以使用Object#inspect或Thread#status来查看线程的状态。 状态有:
run(运行 or 可运行状态)
sleep(挂起状态)
aborting(终止处理中)
dead(终止状态)

Thread.abort_on_exception
Thread.abort_on_exception = newstate
若其值为真的话,一旦某线程因异常而终止时,整个解释器就会被中断

Thread.critical
Thread.critical = newstate
当其值为真时,将不会进行线程切换

Thread.current
返回当前运行中的线程

Thread.exit
终止当前线程的运行。

Thread.kill(thread)
终止指定线程的运行。若该线程已经终止,则不作任何动作。

Thread.list
返回处于运行状态或挂起状态的活线程的数组。

Thread.main
返回主线程

Thread.new([arg, ...]) { ... }
Thread.start([arg, ...]) { ... }
Thread.fork([arg, ...]) { ... }
生成线程,并开始对块进行计算.

Thread.pass
将运行权交给其他线程. 它不会改变运行中的线程的状态,而是将控制权交给其他可运行的线程

Thread.stop
将当前线程挂起,直到其他线程使用run方法再次唤醒该线程.

self[name]
取出线程内与name相对应的固有数据.

self[name] = val
将线程内与name相对应的固有数据的值设为val

abort_on_exception
abort_on_exception = newstate
它返回布尔值,在赋值形式中,它返回右边的newstate。

alive?
若线程是"活"的,就返回true.

exit
kill
terminate 
终止线程的运行.

group 
返回线程所属的ThreadGroup对象.

join
join(limit) 
挂起当前线程,直到self线程终止运行为止. 若self因异常而终止时, 将会当前线程引发同样的异常.


key?(name)
若与name相对应的线程固有数据已经被定义的话,就返回true

keys 
以数组的形式返回与线程固有数据取得关联的索引.

priority
返回线程的优先度. 优先度的默认值为0. 该值越大则优先度越高.

priority = val
设定线程的优先度

raise([error_type,][message][,traceback])
在该线程内强行引发异常.

run
重新启动被挂起(stop)的线程.

safe_level
返回self 的安全等级.

status
使用字符串"run"、"sleep"或"aborting" 来表示活线程的状态.

stop?
若线程处于终止状态(dead)或被挂起(stop)时,返回true.

value
一直等到self线程终止运行(等同于join)后,返回该线程的块的返回值.

wakeup
把被挂起(stop)的线程的状态改为可执行状态(run).



TAG:

 

评分:0

我来说两句

日历

« 2024-04-30  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 151289
  • 日志数: 185
  • 文件数: 6
  • 建立时间: 2007-08-06
  • 更新时间: 2015-01-06

RSS订阅

Open Toolbar