2013-03-10 6 views
5

मुझे दो समांतर कंप्यूटेशंस चलाने की आवश्यकता है और दूसरा एक समाप्त होने पर पहले को बाधित करता है। का उपयोग कर Thread रों स्पष्ट रूप से बिनास्कैला में एसिंक्रोनस कंप्यूटेशंस को कैसे बाधित करें?

/** 
* Runs <var>sup</var> in parallel with <var>main</var>. 
* Terminate (interrupt) it when <var>main</var> finishes. 
*/ 
def support[R](sup: => Unit, main: => R): R = { 
    val supThread = new Thread { 
    override def run = { sup }; 
    } 

    supThread.start(); 
    try { 
    main; 
    } finally { 
    supThread.interrupt(); 
    } 
} 

समान व्यवहार स्काला के समवर्ती पुस्तकालय का प्रयोग कर प्राप्त किया जा सकता है,: वर्तमान में, मैं इसे मानक जावा धागे का उपयोग कर क्रियान्वित किया है?

+0

http://stackoverflow.com/questions/14449862/kill-or-timeout-a-future-in-scala -2-10/14450095 # 14450095 – sourcedelica

+0

जावा के एपीआई के साथ आपका कार्यान्वयन विश्वसनीय नहीं है - बाधा हमेशा उम्मीद के अनुसार काम नहीं करती है और शायद इसका कभी भी उपयोग नहीं किया जाना चाहिए। प्रारंभिक समाप्ति के लिए स्पष्ट रूप से कोड करना बेहतर है - उदा। उपर्युक्त टिप्पणी में जुड़े उत्तर में। एक परमाणु Boolean साझा करना (कई) संभावित समाधानों में से एक है। –

उत्तर

4

नहीं स्काला मानक वायदा (AFAIK) के साथ है, लेकिन Twitter's Util library इसका समर्थन करता है:

val future = Future { sup } 
future.cancel() // in 5.x 
future.raise(new FutureCancelledException) // in 6.x 
+0

क्या अब आपके ज्ञान के लिए 2 साल स्कैला मानक पुस्तकालय में इसके बराबर है? –

+0

सीधे नहीं, लेकिन http://stackoverflow.com/a/16010193/9204 और विशेष रूप से टिप्पणियों में चर्चा देखें। –

संबंधित मुद्दे