- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有这个非常简单的 JCSP(Java 通信顺序进程)代码示例,我在其中尝试将整数写入 One2OneInt channel ,然后读取它。
package jcsp;
import org.jcsp.lang.*;
public class JCSP {
public static void main(String[] args) {
One2OneChannelInt chan = Channel.one2oneInt();
chan.out().write(5);
System.out.println("Written...");
System.out.println(chan.in().read());
}
}
似乎值永远不会写入 channel ,程序只会继续运行。 “书面...” 永远不会打印出来。
最佳答案
于是我了解了BlockingQueue
及其实现SynchronousQueue
。如前所述 here , SynchronousQueue
的工作方式与 CSP Channels
的工作方式类似。这帮助我意识到我的代码出了什么问题。简而言之,您不能在同一进程中从 channel 写入
和读取
。 Channel
是进程进行通信的方式。
类似于 SynchronousQueue 的
put()
将等待其他进程调用 take()
,CSP Channel 的
write()
将等待相应的 read()
被调用。不同之处在于 CSP Channels
具有对象 ChannelOutput
和 ChannelInput
,通过它们写入对象并显示为红色。相反,您可以直接在 SynchronousQueue
实例上调用 put
和 take
。就个人而言,我觉得SynchronousQueue
更容易理解,这可能与JCSP
不是很流行有关。
不过,如果您对我如何使上述代码在 JCSP 中工作感兴趣,请看这里:
public static class Process1 implements CSProcess {
private ChannelOutputInt output;
public Process1(ChannelOutputInt out) {
output = out;
}
@Override
public void run() {
for (int i = 0; i < 1; i++) {
System.out.println("Written...");
output.write(5);
}
output.write(-1);
}
}
public static class Process2 implements CSProcess {
private ChannelInputInt input;
public Process2(ChannelInputInt in) {
input = in;
}
@Override
public void run() {
int x = 0;
while ((x = input.read()) > 0) {
System.out.println(x);
}
}
}
public static void main(String[] args) {
One2OneChannelInt chan = Channel.one2oneInt();
Process1 process1 = new Process1(chan.out());
Process2 process2 = new Process2(chan.in());
Parallel parallel = new Parallel();
parallel.addProcess(process1);
parallel.addProcess(process2);
parallel.run();
}
关于java - 坚持写入 JCSP channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33500139/
我有这个非常简单的 JCSP(Java 通信顺序进程)代码示例,我在其中尝试将整数写入 One2OneInt channel ,然后读取它。 package jcsp; import org.jcsp
我是一名优秀的程序员,十分优秀!