Skip to content

‫آیا متغیرهای Lazy کاتلین ترد سیف هستند؟ #254

Description

@beigirad
با توجه به مستندات مربوطه کاتلین سه نوع پیاده‌سازی مختلف برای Lazy دارد
public enum class LazyThreadSafetyMode {
    SYNCHRONIZED,
    PUBLICATION,
    NONE,
}
SYNCHRONIZED : تنها یک ترد میتواند آن را مقداردهی کند

PUBLICATION: متد مقداردهنده در شرایط همزمانی بین ترد ها ممکن است چندین مرتبه صدا شود. اما اولین مقداری که برگردانده شود بعنوان مقدار اصلی آن استفاده میشود.

NONE: هیچ محدودیتی برای سینکرونایز کردن متد مقداردهنده آن انجام نشده و رفتار آن در شرایط همزمانی مشخص نیست. تنها زمانی قابل استفاده‌است که مطمئن باشیم تنها روی یک ترد مقداردهی خواهد شد.

همچنین نیاز به گفتن نیست که خود Lazy یک اینترفیس با یک متد و یک متغیر که و مقدار متغیر رو نگه میداره:

public interface Lazy<out T> {
    public val value: T
    public fun isInitialized(): Boolean
}

منبع

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions