线程Thread运行过程中出现的问题(未解决)

  • Post author:
  • Post category:其他


程序简单说明

在该程序中设置了两个按钮,一个用于开启线程,一个用于中断线程

源码

public class ThreadTest extends AppCompatActivity implements View.OnClickListener,Runnable{

    private Button mBtnStart;
    private Button mBtnInterrupt;
    Thread thread;
    int i;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_thread_test);
        init();
        setListeners();
    }


    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btn_startThread:
                thread.start();
                Log.i("提示:","开启线程");
                break;
            case R.id.btn_interruptThread:
                thread.interrupt();
                Log.i("提示:","中断线程");
                break;
        }
    }

    private void init(){
        thread = new Thread(this);
        mBtnStart = findViewById(R.id.btn_startThread);
        mBtnInterrupt = findViewById(R.id.btn_interruptThread);
    }

    private void setListeners(){
        mBtnStart.setOnClickListener(this);
        mBtnInterrupt.setOnClickListener(this);
    }

    @Override
    public void run() {

        while(!Thread.currentThread().isInterrupted()&&thread!=null){
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
                Log.i("提示:", "执行了catch");
                
            }
            //Toast.makeText(this,"线程开启",Toast.LENGTH_SHORT).show();
            i++;
            Log.i("循环变量:",String.valueOf(i));
        }

    }
}

中断后循环继续执行问题

先点击 开启线程 按钮,然后再点击 中断线程:出现无法中断循环的问题。打印log如下

原因:

闪退

在以上执行操作的基础上再点击一次 开启线程,会出现闪退。

原因:

在run中不能执行弹出Toast操作,会出现闪退

原因:子线程不能对主线程进行UI操作

疑问

使用interrupt()方法可以向指定的线程发送一个中断请求,并将该线程标记为中断状态。

为何在调用thread.interrupt()之后还会执行while里的程序,!Thread.currentThread().isInterrupted()

不是为false了吗?



版权声明:本文为Black_Cat_33原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。