写入JCSP频道

时间:2015-11-03 13:16:47

标签: java channel

所以我有这个非常简单的 JCSP (Java Communicating Sequential Processes)代码示例,其中我试图将整数写入 One2OneInt 频道然后读它。

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());
    }
}

似乎价值永远不会写在频道上,程序就会继续运行。 "写完......" 永远不会打印出来。

2 个答案:

答案 0 :(得分:6)

所以我了解了BlockingQueue及其实现SynchronousQueue。如上所述hereSynchronousQueue的工作方式类似于CSP Channels。这让我意识到我的代码出了什么问题。简而言之,您不能在同一过程中通道writereadChannel进程进行沟通的方式。

与等待其他流程调用SynchronousQueue's的{​​{1}} put()类似,take() CSP Channel's会等待相应的write()叫做。不同之处在于read()具有对象CSP ChannelsChannelOutput,对象通过这些对象写入红色。相反,您可以直接在ChannelInput的实例上致电puttake。就个人而言,我发现SynchronousQueue更容易理解,这可能与SynchronousQueue不太受欢迎有关。

但是,如果您对我在JCSP中如何使上述代码有效感兴趣,请点击此处:

JCSP

答案 1 :(得分:0)

问题是通道是无缓冲的,因此您的write()调用将阻塞,直到另一个进程从通道读取。只要另一个流程调用read(),就会打印出'已写...'

容量为0的BlockingQueue与JCSP频道的行为类似