内容简介:版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lastsweetop/article/details/83992037
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lastsweetop/article/details/83992037
java版本的CSP操作
public class Chan<T> { private T message; private boolean empty = true; public synchronized T take() { while (empty) { try { wait(); } catch (InterruptedException e) { } } empty = true; notifyAll(); return message; } public synchronized void put(T message) { while (!empty) { try { wait(); } catch (InterruptedException e) { } } empty = false; this.message = message; notifyAll(); } }
基本的csp操作上面就可以了,但是如果想实现golang的select模型,就要对消息进行改造一下:
class ChanMessage<T> { private String type; private T data; public ChanMessage(String type, T data) { this.type = type; this.data = data; } public String getType() { return type; } public void setType(String type) { this.type = type; } public T getData() { return data; } public void setData(T data) { this.data = data; } } public class Chan<T extends ChanMessage> { private T message; private boolean empty = true; public synchronized T take() { while (empty) { try { wait(); } catch (InterruptedException e) { } } empty = true; notifyAll(); return message; } public synchronized void put(T message) { while (!empty) { try { wait(); } catch (InterruptedException e) { } } empty = false; this.message = message; notifyAll(); } public static void main(String[] args) { Chan<ChanMessage<Integer>> chanMessageChan = new Chan<>(); new Thread(() -> { chanMessageChan.put(new ChanMessage<>("timeout", new Integer(1))); }).start(); new Thread(() -> { ChanMessage<Integer> chanMessage = chanMessageChan.take(); switch (chanMessage.getType()) { case "timeout": System.out.println(chanMessage.getData()); break; default: break; } }).start(); } }
至此就用 java 实现了golang的select操作,写完这段代码有种打通了任督二脉的感觉,语言不再是障碍
以上所述就是小编给大家介绍的《java实现golang类似的chan》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 类似Github的webhook实现
- ASP实现类似hashMap功能的类
- PHP实现类似题库抽题效果
- splash 实现类似selenium的WebDriverWait
- C++ 中类似 Python 的 dict 的实现
- 如何实现类似 lodash 的 get 与 merge 函数
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
数据密集型应用系统设计
Martin Kleppmann / 赵军平、李三平、吕云松、耿煜 / 中国电力出版社 / 2018-9-1 / 128
全书分为三大部分: 第一部分,主要讨论有关增强数据密集型应用系统所需的若干基本原则。首先开篇第1章即瞄准目标:可靠性、可扩展性与可维护性,如何认识这些问题以及如何达成目标。第2章我们比较了多种不同的数据模型和查询语言,讨论各自的适用场景。接下来第3章主要针对存储引擎,即数据库是如何安排磁盘结构从而提高检索效率。第4章转向数据编码(序列化)方面,包括常见模式的演化历程。 第二部分,我们将......一起来看看 《数据密集型应用系统设计》 这本书的介绍吧!