2015-01-21 34 views
-1

我有下面的并发通道示例GoByExamples并发性Go的示例

Java中是否有某种等效的东西?我原以为这会更加冗长地实施相同的事情。

// Basic sends and receives on channels are blocking. 
// However, we can use `select` with a `default` clause to 
// implement _non-blocking_ sends, receives, and even 
// non-blocking multi-way `select`s. 

package main 

import "fmt" 

func main() { 
    messages := make(chan string) 
    signals := make(chan bool) 

    // Here's a non-blocking receive. If a value is 
    // available on `messages` then `select` will take 
    // the `<-messages` `case` with that value. If not 
    // it will immediately take the `default` case. 
    select { 
    case msg := <-messages: 
     fmt.Println("received message", msg) 
    default: 
     fmt.Println("no message received") 
    } 

    // A non-blocking send works similarly. 
    msg := "hi" 
    select { 
    case messages <- msg: 
     fmt.Println("sent message", msg) 
    default: 
     fmt.Println("no message sent") 
    } 

    // We can use multiple `case`s above the `default` 
    // clause to implement a multi-way non-blocking 
    // select. Here we attempt non-blocking receives 
    // on both `messages` and `signals`. 
    select { 
    case msg := <-messages: 
     fmt.Println("received message", msg) 
    case sig := <-signals: 
     fmt.Println("received signal", sig) 
    default: 
     fmt.Println("no activity") 
    } 
} 
+1

* Java中是否有相当的东西?*是的。 *我会认为实施相同的事情会更加冗长。*很可能。我的小时费率真的是几乎令人难以置信的合理,如果你想找出肯定... – 2015-01-21 05:43:23

+0

技术上是的,虽然我不打算这样做:-)看看http://www.ibm.com /developerworks/library/j-csp1/index.html(也有部分2和3,从该文档中链接)另外http://www.cs.kent.ac.uk/projects/ofa/jcsp/和维基百科文章在同一个http://en.wikipedia.org/wiki/JCSP。 – Intermernet 2015-01-21 05:43:24

+1

这将是一个很好的起点:http://stackoverflow.com/questions/22561110/equivalent-of-golang-channel-in-java – 2015-01-21 06:12:43

回答

0

Select声明在围棋语言的语法水平,介绍并发的原因。并发函数调用可以(并且通常完成)在库级别上实现,具有帮助函数,如spawn(function()),并且像在大多数其他语言中一样具有互斥或锁定的数据结构。但select声明不能。