我应该如何停止线程执行? 导入java.lang.Thread; 导入java.util.Scanner; 类运行扩展线程{ 私有布尔运行=true; 公共空间关闭(){ 运行=错误; } 公开募捐{ while(运行){ 对于(int i=0;i
这是示例。您可以创建一个布尔字段并在运行中检查它:我应该如何停止线程执行? 导入java.lang.Thread; 导入java.util.Scanner; 类运行扩展线程{ 私有布尔运行=true; 公共空间关闭(){ 运行=错误; } 公开募捐{ while(运行){ 对于(int i=0;i,java,android,multithreading,Java,Android,Multithreading,这是示例。您可以创建一个布尔字段并在运行中检查它: import java.lang.Thread; import java.util.Scanner; class Running extends Thread{ private boolean Run=true; public void shutdown(){ Run=false; } public void run(){ while(Run){ fo
import java.lang.Thread;
import java.util.Scanner;
class Running extends Thread{
private boolean Run=true;
public void shutdown(){
Run=false;
}
public void run(){
while(Run){
for(int i=0;i<1000;i++){
System.out.println("Starting Counter:"+i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
public class Volatile {
public static void main(String[] args) {
Running run1=new Running();
run1.start();
System.out.println("Press any key to stop thread execution");
Scanner sc=new Scanner(System.in);
sc.nextLine();
run1.shutdown();
}
}
要阻止它,就打电话
public class Sample implements Runnable {
private volatile boolean isRunning = true;
public void run() {
while (isRunning) {
//do work
}
}
public void kill() {
isRunning = false;
}
}
这应该可以工作。这是示例。您可以创建一个布尔字段,并在运行中检查它:
import java.lang.Thread;
import java.util.Scanner;
class Running extends Thread{
private boolean Run=true;
public void shutdown(){
Run=false;
}
public void run(){
while(Run){
for(int i=0;i<1000;i++){
System.out.println("Starting Counter:"+i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
public class Volatile {
public static void main(String[] args) {
Running run1=new Running();
run1.start();
System.out.println("Press any key to stop thread execution");
Scanner sc=new Scanner(System.in);
sc.nextLine();
run1.shutdown();
}
}
要阻止它,就打电话
public class Sample implements Runnable {
private volatile boolean isRunning = true;
public void run() {
while (isRunning) {
//do work
}
}
public void kill() {
isRunning = false;
}
}
这应该可以工作。一段时间前,通过调用
线程
的stop()即可停止线程
函数。现在,它被弃用,因为它是不安全的,所以你必须从线程的内部停止线程
。你会发现一个很好的例子。请记住,这样做不会立即停止线程,它只是告诉你可以停止,Android会在必要时停止它 一段时间前,通过调用线程
的stop()即可停止线程
函数。现在,它被弃用,因为它是不安全的,所以你必须从线程的内部停止线程
。你会发现一个很好的例子。请记住,这样做不会立即停止线程,它只是告诉你可以停止,Android会在必要时停止它 您使用的模式是正确的,但应用有点错误:
您的Run
标志只会在1000秒后被检查,因为它只会在for循环完成后被检查。请将代码更改为以下内容:
sample.kill();
public void run(){
while(运行){
对于(int i=0;(i您使用的模式是正确的,但应用有点错误:
您的Run
标志只会在1000秒后被检查,因为它只会在for循环完成后被检查。请将代码更改为以下内容:
sample.kill();
public void run(){
while(运行){
对于(int i=0;(i)
我应该如何停止线程执行
因此,您的帖子提到了volatile
关键字,但我在您发布的代码中没有看到它。您需要确保Run
是volatile boolean
,以便它可以在主线程中更改,而其他线程将看到更改
public void run(){
while(Run){
for(int i=0;(i<1000) && (Run == true);i++){
System.out.println("Starting Counter:"+i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
但我认为问题在于,您仅在外部while
循环中测试此运行
。可能您也希望在内部计数循环中进行测试。类似于:
private volatile boolean Run=true;
for(int i=0;i<1000&&Run;i++){
现在,一旦循环开始计数,它必须在检查Run
布尔值之前完成。这可能需要1000秒的时间
我应该如何停止线程执行
因此,您的帖子提到了volatile
关键字,但我在您发布的代码中没有看到它。您需要确保Run
是volatile boolean
,以便它可以在主线程中更改,而其他线程将看到更改
public void run(){
while(Run){
for(int i=0;(i<1000) && (Run == true);i++){
System.out.println("Starting Counter:"+i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
但我认为问题在于,您仅在外部while
循环中测试此运行
。可能您也希望在内部计数循环中进行测试。类似于:
private volatile boolean Run=true;
for(int i=0;i<1000&&Run;i++){
现在,一旦循环开始计数,它必须在检查运行布尔值之前完成。这可能是未来1000秒的时间。您的代码在for循环中停留1000秒,直到最后到达while(运行)再次分支。我想这就是它不能正常工作的原因。您的代码在for循环中停留1000秒,直到它最终再次到达while(run)分支。我想这就是它不能正常工作的原因。我没有使用“volatile关键字”在您的代码中。只要条件为true,它就会运行,将条件设置为循环外的条件作为一个次要问题,按键不会停止线程的执行。在控制台中键入任何内容后,您都需要按enter键。请记住,如果我的回答对您有帮助,请接受。谢谢。我不支持此选项“volatile关键字”在您的代码中。只要条件为true,它就会运行,将条件设置为循环外条件作为一个次要问题,按键不会停止线程的执行。在控制台中键入任何内容后,您都需要按enter键。如果有帮助,请记住接受我的答案。谢谢。