Java任务循环后停止
在我的项目中,我有这个代码Java任务循环后停止,java,multithreading,loops,task,Java,Multithreading,Loops,Task,在我的项目中,我有这个代码 Task<Void> task = new Task<Void>() { @Override protected Void call() throws Exception { do { ... [do something] ... } while (true); [do other]
Task<Void> task = new Task<Void>() {
@Override
protected Void call() throws Exception {
do {
...
[do something]
...
} while (true);
[do other]
return null;
}
};
new Thread(task).start();
Task Task=新任务(){
@凌驾
受保护的Void调用()引发异常{
做{
...
[做点什么]
...
}虽然(正确);
[做其他事情]
返回null;
}
};
新线程(任务).start();
循环工作正常,但未执行循环外指令[do other]。
你能帮我理解吗
谢谢
更新
“while(true)”只是一个例子。
循环将一直工作,直到条件为真!
真正的命令是“while(x Callable<Void> task = new Callable<Void>() {
@Override
public Void call() throws Exception {
do {
rowBin = new ASN1BinaryModel("000A" , "A0", "80", "54", "31", "0F", "0B", "A0", "80", "54", "31", "0F", "0B", "A0", "80", "54", "31");
asn1BinaryTable.getItems().add(rowBin);
countTotByte = countTotByte + 16;
System.out.println("HEX: " + countTotByte);
} while (countTotByte <= len);
System.out.println("END LOOP");
return null;
Callable task=newcallable(){
@凌驾
public Void call()引发异常{
做{
rowBin=新ASN1BinaryModel(“000A”、“A0”、“80”、“54”、“31”、“0F”、“0B”、“A0”、“80”、“54”、“31”、“0F”、“0B”、“A0”、“80”、“54”、“31”);
asn1BinaryTable.getItems().add(rowBin);
countTotByte=countTotByte+16;
System.out.println(“十六进制:“+countTotByte”);
}while(countTotBytedo{…}while(true)
保持循环
尝试使用变量而不是true
,并将此变量设置为false
。循环将结束,执行[执行其他]
我不确定您的任务
,但已更改为可调用
和执行服务
:
以下是一个例子:
public static void main(String[] args) {
Callable<Void> task = new Callable<Void>() {
@Override
public Void call() throws Exception {
int i = 0;
do {
i++;
System.out.println(i);
} while (i < 10);
System.out.println("end");
return null;
}
};
ExecutorService executor = Executors.newFixedThreadPool(10);
executor.submit(task);
}
do{…}while(true)
保持循环
尝试使用变量而不是true
,并将此变量设置为false
。循环将结束,执行[执行其他]
我不确定您的任务
,但已更改为可调用
和执行服务
:
以下是一个例子:
public static void main(String[] args) {
Callable<Void> task = new Callable<Void>() {
@Override
public Void call() throws Exception {
int i = 0;
do {
i++;
System.out.println(i);
} while (i < 10);
System.out.println("end");
return null;
}
};
ExecutorService executor = Executors.newFixedThreadPool(10);
executor.submit(task);
}
看起来你有一个无限循环。在一些循环执行之后,以某种方式使sur x>=y以摆脱它。看起来你有一个无限循环。在一些循环执行之后,以某种方式使sur x>=y以摆脱它。好的,我是白痴……对不起
问题出在字节数据[]数组中
我读取一个文件并在数据[size]中插入字节,其中[size]是文件长度。
在我获得16字节的时间并将行添加到TableView之后。
问题是最后的X字节,因为不确定它们是否为16!
通过这种方式,命令:
String.format("%02X", data[countTotByte+n])
当发现第一个字节[]“空”时失败
我再次抱歉…好吧,我是个白痴…抱歉
问题出在字节数据[]数组中
我读取一个文件并在数据[size]中插入字节,其中[size]是文件长度。
在我获得16字节的时间并将行添加到TableView之后。
问题是最后的X字节,因为不确定它们是否为16!
通过这种方式,命令:
String.format("%02X", data[countTotByte+n])
当发现第一个字节[]“空”时失败
我再次感到抱歉…我很抱歉,“while(true)”就是一个例子。循环运行直到一个变量是另一个变量的次变量:while(xx>=y
循环将退出。我确定。我已经用打印输出测试了循环,并且运行良好。没有更多的代码(请参阅:sscce.org)很难说为什么。RobAu,我尝试了你的解决方案并开始工作……但是,我认为问题在于我在[do sometingh]中的指示我在我的问题中添加了更新对不起,“while(true)”就是一个例子。循环运行直到一个变量是另一个变量的次变量:while(xx>=y
循环将退出。我确定。我已经用打印输出测试了循环,工作正常。如果没有更多的代码(请参阅:sscce.org),很难说为什么。RobAu,我尝试您的解决方案并工作……但是,我认为问题在于我在[DoSometingh]中的指令我将更新添加到我的问题中,循环工作正常。在[do something]中,我设置了循环的退出值,循环工作正常。在[do something]中我从循环设置退出值。可能一个写入变量是共享的,在线程外声明,在引擎盖下创建外部变量的副本,并在变量不稳定时在特定点上同步。使这样一个变量不稳定
。可能一个写入变量是共享的,在线程外声明引擎罩会复制外部变量,并在变量不稳定时在特定点上同步。使这样的变量不稳定。