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
相关问题
例模式怎么创建?怎么多线程
422浏览 • 1回复 待解决
ArkTs多线程方案如何保证线程安全
2589浏览 • 2回复 待解决
ArkTS实例化与例介绍
3028浏览 • 1回复 待解决
求大佬告知ArkTS是否支持多线程
2056浏览 • 1回复 待解决
如何使用taskpool实现多线程
1167浏览 • 1回复 待解决
HarmonyOS多线程使用
203浏览 • 0回复 待解决
HarmonyOS 关于多线程并发的使用
41浏览 • 1回复 待解决
HarmonyOS ArkTS会不会支持多线程开发
12529浏览 • 4回复 待解决
首选项获取实例实例是否为
1972浏览 • 1回复 待解决
HarmonyOS 多线程写法限制
163浏览 • 1回复 待解决
HarmonyOS 多线程并发相关问题
265浏览 • 1回复 待解决