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; 
  } 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
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%') 
  } 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
分享
微博
QQ
微信
回复
2024-08-04 13:25:28


相关问题
例模式怎么创建?怎么多线程
1520浏览 • 1回复 待解决
ArkTs多线程方案如何保证线程安全
3513浏览 • 2回复 待解决
ArkTS实例化与例介绍
4421浏览 • 1回复 待解决
HarmonyOS多线程使用
763浏览 • 0回复 待解决
HarmonyOS ArkTS会不会支持多线程开发
31750浏览 • 4回复 待解决
求大佬告知ArkTS是否支持多线程
2681浏览 • 1回复 待解决
如何使用taskpool实现多线程
1991浏览 • 1回复 待解决
HarmonyOS 关于多线程并发的使用
832浏览 • 1回复 待解决
首选项获取实例实例是否为
2623浏览 • 1回复 待解决
HarmonyOS是否支持多线程
719浏览 • 0回复 待解决
HarmonyOS 多线程锁问题
1305浏览 • 1回复 待解决