Scala的一些解释

[TOC]

scala 并发

Java内存模型主要围绕原子性、可见性、有序性展开。synchronized语句是最基本的并发处理方式。

2.1 进程和线程

JVM与操作系统:启动一个JVM实例会创建一个进程。在JVM进程中可以有多个线程同时运行。与Python之类语言的运行时系统不同,JVM不实现自定义线程——每个JVM线程直接与一个OS线程对应。JAVA线程的运行方式与OS线程的运行方式非常相似。

2.2 创建和启动线程

join方法会暂停main线程的执行过程,直到t执行完毕。实际是将main线程切换到了waiting状态。处于waiting状态的线程会交出CPU的控制权。

sleep方法会使当前线程进入timed waiting状态。

多线程的执行顺序是不确定的。

2.3 原子执行方式

最简单的线程通信:共享变量。t线程使用join将main线程暂停,读取-修改-回写result;t线程结束后,main线程读取到的result已经被修改过。

在Scala中,synchronized语句是在JVM中进行线程间通信的基本机制

#Chapter 1

  1. scala的包装类型会被自动编译成基本类型

  2. scala没有强制类型转换,要用方法,toInt

  3. scala没有++, 要用+=1

  4. "Hello.distinct" helo

  5. Array(1,2,3) res8: Array[Int] = Array(1, 2, 3)

  6. scala> "crazy"*3 res10: String = crazycrazycrazy

Chapter 2

  1. val被声明为lazy时,它的初始化会被推迟到首次对它取值

Chapter3 数组

scala> val s = (180, "guoyifan", 85) s: (Int, String, Int) = (180,guoyifan,85)

scala> s._1 res24: Int = 180

scala> s._2 res25: String = guoyifan

scala> s._3 res26: Int = 85

scala> val s = Array("<", "-") s: Array[String] = Array(<, -)

scala> s.zip(Array(2,10)) res27: Array[(String, Int)] = Array((<,2), (-,10))

scala> s.zip(Array(3,10)) res28: Array[(String, Int)] = Array((<,3), (-,10))

scala> s.zip(Array(3,10,10)) res29: Array[(String, Int)] = Array((<,3), (-,10))

scala> val keys = ("g", "s") keys: (String, String) = (g,s)

scala> val values = (1, 2) values: (Int, Int) = (1,2)

scala> keys.zip(values).toMap <console>:20: error: value zip is not a member of (String, String) ​ keys.zip(values).toMap ​ ^

scala> s.zip(Array(2,10)).toMap res31: scala.collection.immutable.Map[String,Int] = Map(< -> 2, - -> 10)

scala>

Chapter5 class

Chapter6 单例