首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在主类中启动新线程的Java类

在主类中启动新线程的Java类
EN

Stack Overflow用户
提问于 2016-07-16 15:45:14
回答 1查看 73关注 0票数 0

我正在尝试为我的用户编写一个库,并希望它尽可能易于使用。现在,要使用它,你必须启动一个新的线程,并在你的主类中设置很多要跟踪的变量,然而我的用户并不总是对Java有经验,并且线程对我的一些用户来说可能太难了。

所以我想把整个线程移到我的类中,并允许用户调用一个函数来启动线程。

下面是我当前在主类中运行的线程:

代码语言:javascript
复制
int valueToAdd = 0;

DreamStatsTracker tracker = new DreamStatsTracker();

StartSessionResponse response = tracker.StartSession("ae-13s-90-11", "Abe");

System.out.println(response.getMessage());

System.out.println("Adding skill Herblore");

String message = tracker.AddSkill(response.getSessionId(), Skill.HERBLORE, "Abe");

Thread thread = new Thread(() -> {  
  while(true) {
    tracker.SetValueForSkill(response.getSessionId(), Skill.HERBLORE, valueToAdd);
  }
});

我想把整个东西移到DreamStatsTracker类中,并从主类中做一些类似的事情:

代码语言:javascript
复制
DreamStatsTracker tracker = new DreamStatsTracker();

tracker.AddSkill(Skill1, ValueForSkill1);

tracker.AddSkill(Skill2, ValueForSkill2);

tracker.Start();

这将启动DreamStatsTracker的一个新实例,该实例将启动一个新线程,并在主类运行时在后台持续跟踪添加的技能的值。

我该如何处理这件事,这是可能的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-16 22:54:58

经过几个小时的测试和尝试,我终于解决了我的问题。

这是我所做的:

追踪器类:

代码语言:javascript
复制
Thread mainThread;

public DreamStatsTracker(){
    mainThread = new Thread(() -> {
        while(true){
            for (SkillAndValue skillAndValue : Skills) {
                try {
                    SetValueForSkill(this.SessionId, skillAndValue.getSkill(), skillAndValue.getValue());
                    System.out.println("Added value: " + skillAndValue.getValue());
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            try {
                Thread.sleep(2000);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    });

}

public void AddSkillAndValue(Skill Skill, Callable<Integer> function) throws Exception{
    Skills.add(new SkillAndValue(Skill, function));
}

public void Start(){
    for (SkillAndValue skillAndValue : Skills) {
        AddSkill(this.SessionId, skillAndValue.getSkill(), this.Username);
    }
    this.mainThread.start();
}

这是主类:

代码语言:javascript
复制
public static void main(String[] args) throws Exception {

    DreamStatsTracker tracker = new DreamStatsTracker();

    tracker.StartNewSession("ae-13s-90-11", "Abe");

    tracker.AddSkillAndValue(Skill.HERBLORE, getRandomNumber());

    tracker.Start();

}

private static Callable<Integer> getRandomNumber(){
    return new Callable<Integer>(){
        public Integer call(){
            Random random = new Random();
            return random.nextInt(10000);
        }
    };
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38409012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档