func main() {
//开启一个协程,执行匿名函数里面的内容
go func(){
//do somthing
fmt.Println("im a go 协程")
}()
//休眠10s
time.Sleep(10 \* time.Second)
}
注意: 如上通过go关键字开启一个协程,执行匿名函数里面的内容,这里需要注意main函数所在线程需要休眠以下,以便等开启的协程执行,这是因为go中只要main函数线程退出则进程就退出。
三、同步
在java中我们可以使用Semaphore、CountDownLatch、CyclicBarrier等进行多线程之间同步,比如下面例子:
public final static Semaphore SEMAPHORE = new Semaphore(0);
public static void main(String[] args) throws InterruptedException {
Thread thread1 = new Thread(() -> {
try {
//run method dosomthing
System.out.println(Thread.currentThread().getName() + "done");
}finally {
SEMAPHORE.release();
}
},"thread-1");
thread1.start();
Thread thread2 = new Thread(() -> {
try {
//run method dosomthing
System.out.println(Thread.currentThread().getName() + "done");
}finally {
SEMAPHORE.release();
}
},"thread-2");
thread2.start();
System.out.println("wait all sub thread end");
SEMAPHORE.acquire(2);
System.out.println("all sub thread end");
}
在go中也有类似的工具类:
//创
[video(video-8PGqMbZO-1716354551447)(type-bilibili)(url-https://player.bilibili.com/player.html?aid=1804892953)(image-https://img-blog.csdnimg.cn/img_convert/d03a705143646f4f3f6ea879d59b2788.png)(title-必看视频!获取2024年最新Java开发全套学习资料 备注Java)]
建同步器
var wg sync.WaitGroup
func main() {
//两个信号
wg.Add(2)
//开启一个协程,执行匿名函数里面的内容
go func() {
//信号量减去1
defer wg.Done()
//do somthing
fmt.Println("im A go 协程")
}()
//开启一个协程,执行匿名函数里面的内容
go func() {
//信号量减去1
defer wg.Done()
//do somthing
fmt.Println("im B go 协程")
}()
fmt.Println("wait all sub thread end")
wg.Wait()
fmt.Println(" all sub thread end")
}
四、通道
go中通道分为有缓冲和无缓冲的,本节我们看如何使用有缓冲通道实现生产消费模型
var wg sync.WaitGroup
func printer(ch chan int) {
for i := range ch {
fmt.Println(i)
}
wg.Done()
}
func main() {
//1为携程创建等待
wg.Add(1)
//2创建缓冲通道
ch := make(chan int ,10)
//3开启go协程
go printer(ch)
//4写入到通道
for i := 1; i < 100; i++ {
ch <- i;
}
//5关闭协程
close(ch)
fmt.Println("wait sub thread over")
//6等待携程结束
wg.Wait()
fmt.Println("main thread over")
}
### 最后
金三银四到了,送上一个小福利!
![image.png](https://img-blog.csdnimg.cn/img_convert/574f00c83086069ff614821f63af3fe3.webp?x-oss-process=image/format,png)
![image.png](https://img-blog.csdnimg.cn/img_convert/0260f3b06778ceab9b76a980aebabedc.webp?x-oss-process=image/format,png)
![专题+大厂.jpg](https://img-blog.csdnimg.cn/img_convert/64d02b6e85480288814e1513c50bc0bb.webp?x-oss-process=image/format,png)
### 最后
金三银四到了,送上一个小福利!
[外链图片转存中...(img-En4EiKvK-1716441381828)]
[外链图片转存中...(img-iUVEiLPL-1716441381829)]
[外链图片转存中...(img-lO8oNQvi-1716441381829)]