在java里面我们会涉及到多线程编程的需求,下面首先我们使用java语言来定义一个多线程的任务,首先定义一个任务:
package com.test;
public class TestTask implements Runnable{
private Integer threadNum;
public TestTask (int i) {
this.threadNum = i;
}
@Override
public void run() {
System.out.println("线程执行了: " + threadNum);
}
}然后我们启动多线程来执行这个任务:
public static void main(String[] args) { for(int i = 0;i< 10;i++) { new Thread(new TestTask(i)).start(); } }
然后我们看看执行结果:
可以看到在java语言中,要实现一个多线程,我们只需要继承thread类或者实现Runnable接口,然后使用thread类驱动执行即可,非常的简单。那么在go语言中我们如何来使用呢?
在go语言里面其实我们实现多线程就更加的简单了,因为go语言天生的屏蔽了很多多线程的细节部分,我们只需要在需要执行的函数方法前面添加一个go关键词就可以实现多线程了,下面我们来演示一下上面的案例:
首先定义一个函数方法:
func threadRun(threadNum int) {
fmt.Println("线程执行了:", threadNum)
}然后我们再执行的时候让他进行多线程执行的话,只需要添加一个go关键词即可,示例如下:
for i := 0; i < 10; i++ {
go threadRun(i)
}然后我们执行下看下结果:
可以看到方法被多线程执行了,这就是我们在go语言中实现多线程的案例。
备注:
1、这里的话我们在执行多线程的时候,我们只需要添加一个go关键词即可。
2、在go语言里面可以对任何方法执行多线程操作。
3、上诉案例我们在main里面执行多线程,但是我们在main函数里面执行了time.sleep方法是为什么呢?
答案是:在go语言里面执行多线程是一个子线程和主线程并行的过程,添加go关键词的时候,这个多线程是非阻塞的,因此不会阻塞主线程,让主线程等待子线程执行完后再执行后面的语句 而是主线程在子线程开启之后会继续执行主线程接下来的代码,这样子主线程很快就执行完毕了,然后主线程就会被销毁,当主线程被销毁的时候,不管子线程有没有被执行完毕,都会一起被销毁
下面我们演示下不使用time.sleep阻塞主线程,看下运行结果:
可以看到子线程没有执行完毕,主线程关闭之后,子线程就直接被关闭了。最后按照惯例,附上本案例的源码,登录后即可下载。




还没有评论,来说两句吧...