Skip to content

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

@beigirad

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
}

منبع

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