`

生产者开发者.java golang代码比较

 
阅读更多

我这边写的代码不一定规范 但我想足够可以表示出来了

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相对来说理解起来也更加直观 简单.

分享到:
评论

相关推荐

    idea 172.3968.* golang 插件

    总的来说,IntelliJ IDEA 172.3968.*的Golang插件提供了全面的Go语言开发支持,从基本的语法高亮到高级的代码分析和测试,再到团队协作工具,大大提升了Go开发者的生产力。无论是初学者还是经验丰富的开发者,都能...

    golang 中文离线文档 go文档中文

    Go语言,又称Golang,是Google在2009年发布的一种开源编程语言,它旨在提高开发者的生产力和代码的可维护性。Go语言的设计灵感来源于C语言,但同时引入了垃圾回收、类型安全和并发编程等现代特性,使其成为构建高效...

    CENTOS+KAFKA+GOLANG

    - **配置生产者**:启动时指定对外 IP,如 `bin/kafka-console-producer.sh --broker-list 192.168.216.129:9092 --topic test`。 - **验证交互**:在生产者终端输入任意字符后按回车键,消息将显示在消费者终端。 ...

    开源项目-golang-go.zip

    总之,"开源项目-golang-go.zip"是一个宝贵的资源,无论是对初学者还是经验丰富的开发者,都能从中获益匪浅。通过深入研究和实践,你可以掌握Go语言的核心概念,提升编程能力,并参与到开源社区的建设中。

    由Golang语言提供支持,只有500行后台代码的博客系统

    本项目就是利用Golang的强大功能,仅用500行后台代码就实现了一个功能完善的博客系统,充分体现了Golang的高生产力和代码紧凑性。 【描述】:这个博客系统展示了如何在有限的代码量下,利用Golang实现一个稳定且...

    golang 离线文档

    Go语言的设计目标是提高开发者的生产力,同时保持程序运行的高效性。它结合了C语言的简洁语法和Python的易读性,以及Java的类型系统,成为了一种现代的、高效的编程语言。 本离线文档包含了Go语言的最新官方指南、...

    Go-go-lang-idea-plugin基于IntelliJ平台的GoogleGo语言IDE

    用户可以直接在IDE内查看Go标准库和第三方库的文档,甚至可以在编写代码时看到示例用法,提高了开发者的生产力。 9. **持续集成与构建工具** 插件可以与常用的持续集成工具如Golang CI、Travis CI等无缝对接,...

    golang-exercises:GoLang习题集

    其设计目标是提高开发者的生产效率,提供简洁的语法和强大的并发支持。 Go语言的核心特性包括: 1. **简洁的语法**:Go语言的语法结构清晰,易于理解和学习,没有C++或Java那样的复杂性。 2. **并发原语**:Go语言...

    golang-demystification:揭开语言的神秘面纱

    "**golang-demystification-main**"这个项目很可能是对Golang语言的实践教程或者示例代码集合,它可以帮助初学者通过实际操作来理解和掌握Go语言的各项特性。在学习过程中,可以结合项目中的代码示例,加深对并发...

    nsq-1.1.0.tar.gz

    nsqd是消息生产者和服务端,负责接收和存储消息;nsqlookupd则是一个发现服务,用于协调nsqd节点之间的通信,使得客户端可以找到发布或订阅消息的正确nsqd节点。 在【nsq-1.1.0】中,你可以期待以下关键知识点: 1...

    nacos-2.0.2-9642.rar

    6. **多语言支持**:虽然Nacos主要由Java开发,但同时也支持其他语言,如Golang、Python等,使得非Java语言开发的服务也能无缝接入Nacos。 7. **集群模式**:Nacos支持集群部署,可以实现高可用和数据冗余,确保...

    Golang培训:Golang培训(使用语言)

    Go语言的设计理念是提高开发者的生产力,同时保持系统级编程的性能。在本Golang培训中,我们将深入探讨其主要特性和最佳实践。 1. **语法简洁**:Go语言的语法简洁明了,易于学习。它避免了C++和Java等语言中的复杂...

    GolangGolangGolangGolangGolangGolang.zip

    Golang的设计目标是提高开发者的生产效率,简化系统编程,特别是网络和分布式系统的构建。在5G时代,Go语言因其高效和强大的并发能力,被广泛应用于构建高性能的后端服务。 《Golang学习.md》可能是对Go语言基础到...

    go1.13.3.linux-amd64.tar.gz

    标题中的"Go1.13.3.linux-amd64.tar.gz"指的是Go编程语言的一个特定版本,即1.13.3,为Linux AMD64架构设计的二...无论是初学者还是经验丰富的开发者,都应该关注Go语言的更新,以充分利用其优势并保持代码的安全性。

    find-a-hobby-server-源码.rar

    《深入剖析"find-a-hobby-server-源码"》 在我们的数字时代,软件开发已经成为一个...无论是初学者还是经验丰富的开发者,都能从中获得宝贵的知识和实践经验。请务必亲自浏览源码,实践和调试,以获得更深层次的理解。

    Go语言教程&案例&相关项目资源.zip

    Go语言,又称Golang,是Google在2009年推出的一种开源编程语言,由Robert Griesemer, Rob Pike及Ken Thompson设计。它的设计目标是提高开发者的生产效率,同时保持程序运行的高性能。Go语言的特点包括简洁的语法、...

    golang-tutorial

    它旨在提高开发者的生产力和代码的可维护性,尤其在并发处理、网络编程以及系统级工具开发方面展现出强大的优势。本教程“golang-tutorial”将带领我们深入了解Go语言的核心特性和实用技巧。 1. **Go语言基础** - ...

Global site tag (gtag.js) - Google Analytics