本文讲述了在Java中如何创建和结束线程的最基本方法,只针对于Java初学者。一些高级知识如线程同步、调度、线程池等内容将会在后续章节中逐步深入。
创建线程
创建普通线程有两种方式,继承Thread类或实现Runnable接口。示例如下。
方法1:继承Thread类
创建方法示例:
public class MyThread1 extends Thread { @Override public void run() { //TODO Auto-generated method stub super.run(); System.out.println("Execute thread:MyThread1"); } }
方法2:实现Runnable接口
创建方法示例:
public class MyRunnable1 implements Runnable { @Override public void run() { //TODO Auto-generated method stub System.out.println("Execute thread:MyRunnable1"); } }
运行线程
针对上述两种方法,调用线程开始运行的方法分别如下。
方式示例1:new MyThread1().start();
方法示例2:new Thread(new MyRunnable1()).start();
停止线程
请不要采取已经过时(deprecated)的java.lang.Thread.stop方法,不论你因为何种原因需要暂停或完全结束当前正在运行的线程。
常见的退出线程的方法如下。
方式1:线程自动退出
线程执行完毕,自动退出。例如网络下载线程,当后台下载完后,线程自动退出。
方法2:使用interrupt主动退出
在主线程中,调用线程对象的interrupt()方法,设置线程状态。
final Thread t = new MyThread2(); t.start(); try { Thread.sleep(500); } catch(InterruptedException e) { e.printStackTrace(); } t.interrupt();
在子线程中,调用isInterrupted()方法判断线程状态。如果返回true,则可以结束线程运行。如下示例代码,在线程中有一个while循环,每次循环都会判断线程状态,如果为true,则停止循环,退出线程。
public class MyThread2 extends Thread { @Override public void run() { super.run(); while(true) { // Cancel thread when call interrupt() method if (Thread.currentThread().isInterrupted()) { break; } } } }
在主线程中调用interrupt设置状态,在子线程中通过isInterrupted获取状态,是最好的结束线程的方法。注意主线程中一旦调用interrupt,子线程中相关的sleep, wait方法在执行时会抛出InterruptedException异常,此时也可以通过捕获这种异常来结束线程。
方式3:使用预设标志主动退出
预设一个退出标志,通过判断标志的值结束线程运行。这种情况常见于循环执行中的任务。在每次循环时,判断标志值。如下示例,在线程while循环中判断mCancelFlag标志。
public class MyThread3 extends Thread { private boolean mCancelFlag; @Override public void run() { super.run(); System.out.println("Thread start"); while (mCancelFlag) { // Cancel thread when call interrupt() method break; } System.out.println("Thread over"); } public void cancelThread() { mCancelFlag = true; } }
当主线程希望主动结束线程时,调用线程的cancelThread方法设置mCancelFlag即可。
final MyThread3 t = new MyThread3(); t.start(); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } // stop thread t.cancelThread();
如果在线程执行时,需要主动退出线程,最佳的方式为方法2。用户根据实际情况,例如更多的状态控制,也可以使用方法3。
一句话总结
创建线程:继承Thread类或实现Runnable接口。
结束线程:调用interrupt方法。
忍者必须死34399账号登录版 最新版v1.0.138v2.0.72
下载勇者秘境oppo版 安卓版v1.0.5
下载忍者必须死3一加版 最新版v1.0.138v2.0.72
下载绝世仙王官方正版 最新安卓版v1.0.49
下载Goat Simulator 3手机版 安卓版v1.0.8.2
Goat Simulator 3手机版是一个非常有趣的模拟游
Goat Simulator 3国际服 安卓版v1.0.8.2
Goat Simulator 3国际版是一个非常有趣的山羊模
烟花燃放模拟器中文版 2025最新版v1.0
烟花燃放模拟器是款仿真的烟花绽放模拟器类型单机小游戏,全方位
我的世界动漫世界 手机版v友y整合
我的世界动漫世界模组整合包是一款加入了动漫元素的素材整合包,
我的世界贝爷生存整合包 最新版v隔壁老王
我的世界MITE贝爷生存整合包是一款根据原版MC制作的魔改整