ArkTS多线程下使用单例会创建多份实例

增加一个按钮在主线程调用单例的incrementCount增加,在taskpool中执行单例的fetchCount获取count

异常情况:单例会被创建多次,在主线程的单例count增加不会同步到taskpool执行线程中的count,应该是创建了多份实例;使用共享模块中的use shared声明也不生效

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-sendable-module-V5

“use shared”

// 导出sendable对象 
export { SingleConfig } 
 
 
@Sendable 
class SingleConfig { 
  private static instance: SingleConfig; 
  private count: number = 0; 
 
  public static getInstance(): SingleConfig { 
    if (SingleConfig.instance == undefined) { 
      SingleConfig.instance = new SingleConfig(); 
    } 
    return SingleConfig.instance; 
  } 
 
  public fetchCount(): number { 
    return this.count; 
  } 
 
  public incrementCount() { 
    this.count = this.count + 1; 
  } 
}
HarmonyOS
2024-08-03 11:10:03
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
南风春和

单例传到taskpool

let sig = SingleConfig.getInstance(); 
@Concurrent 
async function test2(sig: SingleConfig){ 
  console.log("test: taskpool count is:"+sig.fetchCount()); 
} 
@Entry 
@Component 
struct Index { 
  @State message: string = 'Hello World'; 
 
  build() { 
    Row() { 
      Column() { 
        Text(this.message) 
          .fontSize(50) 
          .fontWeight(FontWeight.Bold) 
          .onClick(() => { 
            sig.incrementCount(); 
            console.info('lllll:main thread count is:'+sig.fetchCount()); 
            //hilog.info(0x0000, 'testTag', 'Test NAPI 2 + 3 = %{public}d', testNapi.add(2, 3)); 
 
          }) 
        Button("test1") 
          .onClick(async ()=>{ 
            let task = new taskpool.Task(test2, sig); 
            await taskpool.execute(task); 
          }) 
      } 
      .width('100%') 
    } 
    .height('100%') 
  } 
}
分享
微博
QQ
微信
回复
2024-08-04 13:25:28
相关问题
ArkTs多线程方案如何保证线程安全
2200浏览 • 1回复 待解决
ArkTS实例化与例介绍
1441浏览 • 1回复 待解决
如何使用taskpool实现多线程
719浏览 • 1回复 待解决
求大佬告知ArkTS是否支持多线程
1800浏览 • 1回复 待解决
HarmonyOS ArkTS会不会支持多线程开发
1990浏览 • 2回复 待解决
首选项获取实例实例是否为
1665浏览 • 1回复 待解决
Worker多线程使用,有谁知道啊?
674浏览 • 1回复 待解决
HarmonyOS 多线程锁问题
124浏览 • 1回复 待解决
如何实现多线程数据共享
1886浏览 • 1回复 待解决
HarmonyOS关于多线程的问题
139浏览 • 1回复 待解决
DataAbilityHelper.creator()创建实例失败
3771浏览 • 1回复 待解决
如何在设备情况使用hdc
430浏览 • 1回复 待解决
什么情况使用Module
1941浏览 • 1回复 待解决