我这边写的代码不一定规范 但我想足够可以表示出来了
go是最近有学了一段时间了 觉得一些特性(go关键字 内置的channel类型)非常方便
以下是代码:
首先是java的
public void testBlocking() throws InterruptedException{ final BlockingQueue<String> bq=new LinkedBlockingQueue<String>(); final AtomicBoolean isStop=new AtomicBoolean(false); new Thread(new Runnable() { @Override public void run() { int i=0; while(true){ while(!bq.offer("物品"+i++)){}; while(!bq.offer("物品"+i++)){}; if(i>=100){ isStop.compareAndSet(false, true); break; } try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } } }).start(); while(true){ System.out.println(bq.take()); if(bq.isEmpty()&&isStop.get()){ break; } } }
用了一个堵塞的链表作为传递的对象 为了保证原子性操作 使用了AtomicBoolean这个类
因为i是方法的本地变量 AtomicBoolean可以保证赋值和取值的原子性 只有两个线程的关系 不用加锁和同步块
这个会每隔500毫秒 打印两个物品 一直从物品0到物品99
然后用Go实现的:
package main import( "fmt" "strconv" "time" ) func main (){ item:=make(chan string,10) singal:=make(chan int) var count int go func(item chan<- string,singal chan int){ for{ count++ item<-"物品"+strconv.Itoa(count) count++ item<-"物品"+strconv.Itoa(count) if count<100{ singal<- 1 }else{ singal<- -1 break } time.Sleep(3000*time.Millisecond) } }(item,singal) for{ select { case s:=<-item:{ fmt.Println(s) } case flag:=<-singal:{ if(flag==-1){ goto end } } } } end: }
哪里有错误欢迎指正
不看代码的长度 用了channel的go相对来说理解起来也更加直观 简单.
相关推荐
总的来说,IntelliJ IDEA 172.3968.*的Golang插件提供了全面的Go语言开发支持,从基本的语法高亮到高级的代码分析和测试,再到团队协作工具,大大提升了Go开发者的生产力。无论是初学者还是经验丰富的开发者,都能...
Go语言,又称Golang,是Google在2009年发布的一种开源编程语言,它旨在提高开发者的生产力和代码的可维护性。Go语言的设计灵感来源于C语言,但同时引入了垃圾回收、类型安全和并发编程等现代特性,使其成为构建高效...
- **配置生产者**:启动时指定对外 IP,如 `bin/kafka-console-producer.sh --broker-list 192.168.216.129:9092 --topic test`。 - **验证交互**:在生产者终端输入任意字符后按回车键,消息将显示在消费者终端。 ...
总之,"开源项目-golang-go.zip"是一个宝贵的资源,无论是对初学者还是经验丰富的开发者,都能从中获益匪浅。通过深入研究和实践,你可以掌握Go语言的核心概念,提升编程能力,并参与到开源社区的建设中。
本项目就是利用Golang的强大功能,仅用500行后台代码就实现了一个功能完善的博客系统,充分体现了Golang的高生产力和代码紧凑性。 【描述】:这个博客系统展示了如何在有限的代码量下,利用Golang实现一个稳定且...
Go语言的设计目标是提高开发者的生产力,同时保持程序运行的高效性。它结合了C语言的简洁语法和Python的易读性,以及Java的类型系统,成为了一种现代的、高效的编程语言。 本离线文档包含了Go语言的最新官方指南、...
用户可以直接在IDE内查看Go标准库和第三方库的文档,甚至可以在编写代码时看到示例用法,提高了开发者的生产力。 9. **持续集成与构建工具** 插件可以与常用的持续集成工具如Golang CI、Travis CI等无缝对接,...
其设计目标是提高开发者的生产效率,提供简洁的语法和强大的并发支持。 Go语言的核心特性包括: 1. **简洁的语法**:Go语言的语法结构清晰,易于理解和学习,没有C++或Java那样的复杂性。 2. **并发原语**:Go语言...
"**golang-demystification-main**"这个项目很可能是对Golang语言的实践教程或者示例代码集合,它可以帮助初学者通过实际操作来理解和掌握Go语言的各项特性。在学习过程中,可以结合项目中的代码示例,加深对并发...
nsqd是消息生产者和服务端,负责接收和存储消息;nsqlookupd则是一个发现服务,用于协调nsqd节点之间的通信,使得客户端可以找到发布或订阅消息的正确nsqd节点。 在【nsq-1.1.0】中,你可以期待以下关键知识点: 1...
6. **多语言支持**:虽然Nacos主要由Java开发,但同时也支持其他语言,如Golang、Python等,使得非Java语言开发的服务也能无缝接入Nacos。 7. **集群模式**:Nacos支持集群部署,可以实现高可用和数据冗余,确保...
Go语言的设计理念是提高开发者的生产力,同时保持系统级编程的性能。在本Golang培训中,我们将深入探讨其主要特性和最佳实践。 1. **语法简洁**:Go语言的语法简洁明了,易于学习。它避免了C++和Java等语言中的复杂...
Golang的设计目标是提高开发者的生产效率,简化系统编程,特别是网络和分布式系统的构建。在5G时代,Go语言因其高效和强大的并发能力,被广泛应用于构建高性能的后端服务。 《Golang学习.md》可能是对Go语言基础到...
标题中的"Go1.13.3.linux-amd64.tar.gz"指的是Go编程语言的一个特定版本,即1.13.3,为Linux AMD64架构设计的二...无论是初学者还是经验丰富的开发者,都应该关注Go语言的更新,以充分利用其优势并保持代码的安全性。
《深入剖析"find-a-hobby-server-源码"》 在我们的数字时代,软件开发已经成为一个...无论是初学者还是经验丰富的开发者,都能从中获得宝贵的知识和实践经验。请务必亲自浏览源码,实践和调试,以获得更深层次的理解。
Go语言,又称Golang,是Google在2009年推出的一种开源编程语言,由Robert Griesemer, Rob Pike及Ken Thompson设计。它的设计目标是提高开发者的生产效率,同时保持程序运行的高性能。Go语言的特点包括简洁的语法、...
它旨在提高开发者的生产力和代码的可维护性,尤其在并发处理、网络编程以及系统级工具开发方面展现出强大的优势。本教程“golang-tutorial”将带领我们深入了解Go语言的核心特性和实用技巧。 1. **Go语言基础** - ...