gpt4 book ai didi

java - 如何访问正在运行的线程的属性值

转载 作者:行者123 更新时间:2023-11-29 08:43:42 25 4
gpt4 key购买 nike

我有一个运行很长时间(5-6 分钟)的线程。

public class ExportThread implements Runnable {
private Integer totalExport = 0;

@Override
public void run() {
try {
exportCorner();
} catch (Exception e) {
e.printStackTrace();
}
}

private void exportCorner() {
List<MyObject> list = ......
for(MyObject o : list){
.......
totalExport++;
}
}
}

这个线程从另一个类运行。如何在一小段时间后一次又一次地获取 totalExport?

最佳答案

只需在线程类中添加一些 getter 即可,正如@RomanKonoval 所说,它需要同步

public class ExportThread implements Runnable {
private Integer totalExport = 0;

@Override
public void run() {
try {
exportCorner();
} catch (Exception e) {
e.printStackTrace();
}
}

private void exportCorner() {
List<Integer> list = ......
for(Integer i : list){
totalExport += i;
}
}

public synchronized Integer getTotalExport(){
return this.totalExport;
}
}

在你的其他类(class)你可以使用类似的东西

import java.util.*;

public class MainClass {
public static void main(String[] args) {
ExportThread exportThread = new ExportThread();
Thread t = new Thread(exportThread);
t.start();

TimerTask timerTask= new MyTimerTask(exportThread);
Timer timer = new Timer();

timer.scheduleAtFixedRate(tasknew,new Date(),1000);
}

}

那么你可能需要实现你的定时器任务

public class MyTimerTask extends TimerTask { 
private ExportThread exportThread;
public MyTimerTask(ExportThread exportThread){
this.exportThread = exportThread;
}
@Override
public void run() {
System.out.println(exportThread.getTotalExports());
}
}

关于java - 如何访问正在运行的线程的属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38073518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com