Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Future
s_edward
January 24, 2019
Technology
2
390
Future
s_edward
January 24, 2019
Tweet
Share
More Decks by s_edward
See All by s_edward
ScalaとGraalVM
takesection
1
180
AWS VPC
takesection
0
30
ThreadPoolの使い分け
takesection
1
85
FutureとThreadPool
takesection
3
450
First Steps in Scala
takesection
1
220
Introduction to the akka streams
takesection
1
48
MicroServices and sbt-native-packager
takesection
0
270
AWS ECS と Fargate
takesection
0
180
greengrass
takesection
0
310
Other Decks in Technology
See All in Technology
DeepDive into Modern Development with AWS
mokocm
1
320
経験者が話す!クラウド接続の3つの注意点と最新情報
sbtechnight
0
300
SPAとWebアプリケーションでCognitoの使い方はどう変わるのか? / How do we use cognito with SPA and web applications?
kitano_yuichi
0
360
塩漬けにしているMySQL 8.0.xxをバージョンアップしたくなる、ここ数年でのMySQL 8.0の改善点 / MySQL Update 202208
yoshiakiyamasaki
1
570
ふりかえりの技術 / retrospectives
soudai
1
100
最先端の生成AIから考える、ビジネスにおける10年後のパラダイムシフト
sbtechnight
1
310
Settlement simulation testing to ensure correct settlement processing
applepine1125
2
890
20220803投資先CXO候補者向け 会社紹介資料_合同会社BLUEPRINT
hik
0
150
一番小さなリファクタリングの話
shirayanagiryuji
0
140
脆弱性スキャナのOWASP ZAPを コードベースで扱ってみる / OWASP ZAP on a code base
task4233
1
200
Sysdig Secure/Falcoの活用術! ~Kubernetes基盤の脅威モデリングとランタイムセキュリティの強化~
owlinux1000
0
200
VS Code Meetup #21 - もう一度知りたい基礎編 - ファイル操作、コーディングの基本編
74th
0
160
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
7
1.1k
Web development in the modern age
philhawksworth
197
9.3k
Fireside Chat
paigeccino
13
1.4k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
498
130k
Adopting Sorbet at Scale
ufuk
63
7.6k
Support Driven Design
roundedbygravity
87
8.6k
How to Ace a Technical Interview
jacobian
266
21k
Building a Scalable Design System with Sketch
lauravandoore
448
30k
Imperfection Machines: The Place of Print at Facebook
scottboms
253
12k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
212
20k
GraphQLの誤解/rethinking-graphql
sonatard
31
6.8k
The Invisible Side of Design
smashingmag
290
48k
Transcript
'VUVSF 4IJHFLJ4IPKJ
r4DBMBεέʔϥϒϧϓϩάϥϛϯά lεϨουɺϩοΫɺϞχλʔͳͲɺσουϩοΫ ͱڝ߹ͷཕݪͰ͋Δz
+BWB'VUVSF w +BWB͔Β͋Δɺ'VUVSFΛऔΓग़͢ͱ͖ɺඇಉظ ܭࢉͷ݁ՌΛHFUϝιουͰऔಘ͢Δɻ͜ͷͱ͖ݺͼग़͠ ͍ͯΔεϨουϒϩοΫ͞ΕΔɻܭࢉ݁ՌΛͬͯ͞Β ʹܭࢉΛਐΊΔͨΊʹɺྃΛͭඞཁ͕͋Δɻ "844%,GPS+BWBܥͷ"TZOD͜ͷ'VUVSF͕ ΘΕ͍ͯΔɻ def process(jf:
java.util.concurrent.Future[Int]): Int = { jf.get()
$PNQMFUBCMF'VUVSF w +BWBͰಋೖ͞Εͨ৽͍͠'VUVSFɻ UIFO"QQMZ 'VODUJPO UIFO"DDFQU $POTVNFS ͳͲΛ ͬͯɺϒϩοΫ͞ΕΔ͜ͱͳ͘ɺNPOBEJDʹॲཧ͕ॻ ͚ΔΑ͏ʹͳͬͨɻ
"844%,GPS+BWBͷ"TZODͰ͜Ε͕ΘΕΔɻ def process(cf: CompletableFuture[Int]) = { cf.thenApply(x => x * 2) .thenAccept(x => println(x)) }
4DBMBͷ'VUVSF w 4DBMBͷ'VUVSF$PNQMFUBCMF'VUVSFಉ༷ʹϒϩοΫ ͞Εͳ͍ɻ def process(sf: scala.concurrent.Future[Int]) = { sf.map(x
=> x * 2) .map(x => x.toString) .foreach(str => println(str)) }
$PNQMFUBCMF'VUVSF4DBMB'VUVSF w PSHTDBMBMBOHNPEVMFTTDBMBKBWBDPNQBUΛ͏͜ ͱͰɺUP+BWB UP4DBMBͰ $PNQMFUBCMF'VUVSF $PNQMFUBCMF4UBHF ͱ'VUVSFΛ ૬ޓʹม͢Δ͜ͱ͕Ͱ͖Δ def
convert[T](cf: CompletableFuture[T]): scala.concurrent.Future[T] = cf.toScala def convert[T](cf: scala.concurrent.Future[T]): CompletionStage[T] = cf.toJava
ࢭ·Βͳ͍
w εϨου͕͍͖͚ͭͮΔ object Examples extends App { val es =
Executors.newCachedThreadPool() implicit val ec = ExecutionContext.fromExecutorService(es) val future = scala.concurrent.Future { Thread.sleep(5000) println("running") () } println("end") future.onComplete(x => x.fold(ex => ex.printStackTrace(), _ => println("success"))) }
object Examples extends App { val es = Executors.newCachedThreadPool() implicit
val ec = ExecutionContext.fromExecutorService(es) val future = scala.concurrent.Future { Thread.sleep(5000) println("running") () } println("end") future.onComplete(_ => es.shutdown()) }
ϑϦʔζ
w &YFDVUJPO$POUFYU*NQMJDJUTHMPCBM"LLBͷEFGBVMU EJTQBUDIFSɺ'PSL+PJO1PPM͕༻͞ΕΔɻ w 'PSL+PJO1PPMଞͷछྨͷ&YFDVUPS4FSWJDFͱҟͳΓ XPSLTUFBMJOHΛ༻͢Δɻ w ϒϩοΩϯάॲཧ͕͋ΔͱɺػதʹଞͷλεΫͷͨΊ ʹεϨουΛ༻͢Δ͜ͱ͕Ͱ͖ͳ͘ͳΔͨΊɺσου ϩοΫΛى͜͢͜ͱ͕͋Δɻ
w ϒϩοΩϯά*0͚ͩͰͳ࣍͘ͷΑ͏ͳίʔυϒϩοΫ ͕ൃੜ͢Δ def process(jf: java.util.concurrent.Future[Int]): Int = { jf.get()
Thread.sleep(5000)
5ISFBE 5ISFBE
w 'PSL+PJO1PPMͷεϨου͕͔ͭ͠ͳ͍߹ɺԼͷίʔ υɺKGΛ࣮ߦ͢ΔͨΊͷεϨουΛӬԕʹͭ͜ͱʹ ͳͬͯ͠·͏ val A = scala.concurrent.Future { val
jf: java.util.concurrent.Future[Int] = ... jf.get() } val B = scala.concurrent.Future { while (true) { Thread.sleep(500) } } " # 5ISFBE 5ISFBE
r4DBMBεέʔϥϒϧϓϩάϥϛϯά lʮϑϡʔνϟʔۭؒʯʹೖͬͨΒɺͰ͖ΔݶΓϑʔ νϟʔۭؒʹ͍ଓ͚ΔΑ͏ʹ͖ͩ͢z ·ͱΊ
w "LLB3FBDUJWF4USFBNTΛ͏߹ʹɺϒϩοΩϯ ά͠ͳ͍Α͏ʹ͠·͠ΐ͏ w 'VUVSFΛ͏߹ɺ+BWBͷ$PNQMFUBCMF'VUVSF 4DBMBͷ'VUVSFΛ͍·͠ΐ͏ w "844%,GPS+BWBɺ$PNQMFUBCMF'VUVSFΛฦ͢Α ͏ͳɺ4DBMBͷ'VUVSFʹม͢Δ͜ͱ͕Մೳͳ"1*Λ͍ ·͠ΐ͏
w ϒϩοΩϯά͕ඞཁͳ߹ɺ'PSL+PJO1PPMͰͳ͘ɺ 'JYFE5ISFBE1PPMΛׂΓͯ·͠ΐ͏