goroutine线程
2017-10-16 本文已影响0人
zzjack
原文链接:http://www.cnblogs.com/yjf512/archive/2012/06/06/2537712.html
创建
go funcName() 可以创建一个线程。
阻塞
多线程中,主线程要等子线程全部结束后再结果。换句话说,在没确认子线程全部执行完毕前,主线程不能先结束。那么如何确认子线程是否结束呢?用channel。
channel阻塞主线程
func te(messager chan int,who int){
UT.SetTime(messager,"minute",map[string]int{"S":5})
log.Println("i am thread",who)
select {
case <- messager:
fmt.Println("hello")
break
return
}
}
func main(){
exitSignal := make(chan int)
t := make(chan int,1)
for i:=0;i<5;i++{
go te(t,i)
}
<- exitSignal
}
setTime是我写的定点器,就在这个文章系列里面。
我这个例子是为了实验,当主线程结果时(return),子线程是否会结果(setTime里面的子线程),会不会抛异常出来,结果发现不会。