内容简介:版权声明:本文为博主原创文章,未经博主允许不得转载。 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 函数
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
像程序员一样思考
V. Anton Spraul / 徐波 / 人民邮电出版社 / 2013-6 / 49.00元
编程的真正挑战不是学习一种语言的语法,而是学习创造性地解决问题,从而构建美妙的应用。《像程序员一样思考》分析了程序员解决问题的方法,并且教授你其他图书所忽略的一种能力,即如何像程序员一样思考。全书分为8章。第1章通对几个经典的算法问题切入,概括了问题解决的基本技巧和步骤。第2章通过实际编写C++代码来解决几个简单的问题,从而让读者进一步体会到问题解决的思路和应用。第3到7章是书中的主体部分,分别探......一起来看看 《像程序员一样思考》 这本书的介绍吧!