在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阻塞主线程,看下运行结果:
可以看到子线程没有执行完毕,主线程关闭之后,子线程就直接被关闭了。最后按照惯例,附上本案例的源码,登录后即可下载。
还没有评论,来说两句吧...