我这边写的代码不一定规范 但我想足够可以表示出来了
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相对来说理解起来也更加直观 简单.
相关推荐
go1.12.5.linux-arm64.tar.gz golang 最新arm编译包.....
idea 2017.2,版本号172.3968.*的golang插件,亲测支持
golang.org google.golang.org gopkg.in 3个墙外库
该存储库包含 MQTT 3.1 / 3.11 Go客户端库的源代码。 该代码构建了一个库,该库使应用程序能够连接到代理以发布消息,订阅主题并接收已发布的消息。 该库支持完全异步的操作模式。 支持MQTT V5的客户端。 安装与...
golang语言介绍,安装部署,运行第一个程序及基础介绍,工具介绍,go module,基础语法,常用数据结构,函数介绍,指针,结构体,接口,错误处理,协程,通道,通道选择器及常用函数。 【章节目录】 01-03.golang...
<Learn Data Structures and Algorithms with Golang> 英文电子书,epub格式。
Golang 代码规范,目录 基础规范 gofmt 项目目录结构 包管理器 注释 命名 错误处理 单元测试 进阶规范 在项目中不要使用相对路径引入包,要用绝对路径 声明slice 非空slice检查 ......
go get git.eclipse.org/gitroot/paho/org.eclipse.paho.mqtt.golang.git 客户端依赖于 Google 的包,也可以使用以下命令轻松安装: go get code.google.com/p/go.net/websocket 用法和API 详细的 API 文档可以...
Go入门学习的一组示例golang代码
asn1 - golang的Asn.1 BER 和 DER 编码库
随书前言如下:Learn Data Structures and Algorithms with Go covers topics related to simple and advanced concepts in computer programming. The primary objective is to choose the correct algorithm and ...
基于GoLang编写的VPS实时监控系统源码+项目说明.zip基于GoLang编写的VPS实时监控系统源码+项目说明.zip基于GoLang编写的VPS实时监控系统源码+项目说明.zip基于GoLang编写的VPS实时监控系统源码+项目说明.zip基于...
这篇文章是一份关于Golang编程语言入门介绍的内容。主要包括以下几个方面: 1. Golang简介 介绍了Golang语言的起源、发展历程以及主要特点,如天生支持并发、语法简单、部署维护成本低等。 2. Golang应用领域 列举...
国密加密解密 sm4 sm2 的java python golang实现,java和python,golang的有一定区别,需要修改点东西才可以实现。 SM4Key = ran_str = ''.join(random.sample(string.ascii_letters + string.digits, 16)) ...
用 500 行 Golang 代码实现高性能的消息回调中间件
Intellij IDEA Golang plugins 插件 Intellij IDEA Golang plugins 插件 Intellij IDEA Golang plugins 插件
golang中文手册.chm,学习golang语言的字典,一典在手,天下我有
配置好数据库,和表名以及生成目录,可以自动生成Model文件,可以自己修改或者,配置好以后运行codegen_test.go
后端 (Java Golang)全栈知识架构体系总结.zip
使用golang语言开发的生命游戏小程序,只完成了很少一部分功能。项目用了gxui界面库,可供大家学习探讨使用。