Stately
Stately 是一个用于在 Kotlin 多平台中促进状态管理的状态实用程序库。它最初是为了方便使用严格的 Kotlin/Native 内存模型而编写的。从 Kotlin 1.7.20 开始,严格模型已被弃用,Stately 的相关模块也已被弃用,但仍在发布和可用。
Stately 目前提供了并发原语和并发集合。
stately-concurrency
stately-concurrency
包含一些并发支持类。这些包括一组 Atomicxxx
类、一个 Lock
、一个 ThreadLocal
容器、一个 Synchronizable
类型,以及一个允许你保存线程 ID 的 ThreadRef
类。
这个模块的大部分功能与 atomic-fu 类似。它们在某些方面有所不同,所以虽然它们都涵盖了许多相同的领域,但 Stately 的版本仍然有一些用处。
ThreadRef
是 Stately 独有的。它允许你捕获创建它的线程的 ID 引用,并询问当前线程是否相同。请注意,它并不保留对实际线程的引用,只保留 ID。使用方法如下:
fun useRef(){
val threadRef = ThreadRef()
threadRef.same() // <- true
backgroundThread {
threadRef.same() // <- false
}
}
Synchronizable
类型允许我们在公共代码中使用 JVM 的 synchronized
,以及在原生不支持它的 Kotlin/Native 中使用。
class MyMutableData(private var count: Int = 0) : Synchronizable() {
fun add() {
synchronize { count++ }
}
val myCount: Int
get() = synchronize { count }
}
你的类型应该扩展 Synchronizable
,在 JVM 上它是 Any
的类型别名。然后你可以像上面的例子那样使用 synchronize
。
配置
commonMain {
dependencies {
implementation("co.touchlab:stately-concurrency:2.0.0")
}
}
stately-concurrent-collections
一组相对简单的线程安全的可变集合。
val list = ConcurrentMutableList<Int>()
val list.add(42)
配置
commonMain {
dependencies {
implementation("co.touchlab:stately-concurrent-collections:2.0.0")
}
}
订阅!
我们构建的解决方案可以帮助团队顺利开始使用 Kotlin 多平台移动开发,并确保他们在生产中取得成功。加入我们的社区,了解你的同行如何采用 KMM。 在这里注册!
主要维护者
如果没有及时回复,可以在 twitter 上 ping 我 @kpgalligan! -Kevin
许可证
Copyright 2024 Touchlab, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.