下面再详细的说下子线程和主线程的问题t1 = Thread.new { sleep 100 }t2 = Thread.new do if Thread.current == Thread.main #不会输出 puts 'this is main thread!' end 1.upto(1000) { sleep 0.1 }endcount = Thread.list.size #3, 当前有三个线程,一个是运行该脚本的主线程(main thread),一个是t1,还有t2,由于他们正在做循环操作所以没有结束退出,还在当前线程列表中if Thread.list.include?(Thread.main) #当前就在主线程的环境下 puts 'Main thread is alive' #一直都会输出endif Thread.current == Thread.main #因为当前环境就在主线程下操作和运行的,所以为true puts 'I am main thread' #输出end上面用到了几个线程的方法,作用从字面上就可以看出来,主要是可以比较明确的理解下主线程和子线程的关系,在上一篇线程的讲解中已经提到了线程是进程的执行单元。当进程被初始化后,主线程就被创建了。对于绝大多数的应用程式来说,通常仅需要有一个主线程。尽管如此进程也能够创建额外的线程。
2008-08-06 10:36:35, 382 reviews
send to mailbox
在学习Thread,下面是一个例子t1 = Thread.new do i = 1 while i <= 100000 do i += 1 end puts 'ok, end!'endputs 'main thread start..'#如果没有下面的操作,将不会看到上面的任何输出,所以可以这样理解# 改脚本运行时相当于ruby创建了一个进程,然后又派发出一个主线程来运行该脚本,# 线程是进程的执行单元。当进程被初始化后,主线程就被创建了。# 对于绝大多数的应用程式来说,通常仅需要有一个主线程。尽管如此进程也能够创建额外的线程。# t1又创建了一个子线程执行循环的操作,此时主线程比t1的子线程早结束,所以强制# 结束了子线程,即不会看到任何输出,# 当执行下面的t1.join时,主线程将会等待子线程的结束才退出t1.join
2008-08-06 10:22:22, 357 reviews
just DO NOT support IE