我应该如何停止线程执行? 导入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键。如果有帮助,请记住接受我的答案。谢谢。