一、线程核心执行流程方法 -- run()
run方法是Runnable接口中定义的。所有实现Runnable的接口的子类都需要覆写run方法。
run方法是线程的核心执行流程方法,也就是说,run方法决定了线程启动后要干什么,当run方法执行完毕(JVM启动run方法),线程会进入销毁状态。
二、启动线程-- start()
start方法是Thread类定义的。start方法是启动线程调用的方法,只有当线程对象调用start方法之后才会被系统调度,进入运行状态。
当线程启动之后,若再次调用start()方法,就会抛出IllegalThreadStateException(非法线程状态异常),说明该线程已经启动过了。
三、中断线程
(一)通过共享变量中断线程
public class ThreadInterruptByVariable {
private static class MyThread implements Runnable{
volatile boolean isQuit = false;
@Override
public void run() {
while (!isQuit){
System.out.println(Thread.currentThread().getName() + " 别烦我,正在转账呢~~");
try {
// 每次转账休眠1s
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName()+"被中断了");
}
}
public static void main(String[] args) throws InterruptedException {
MyThread mt = new MyThread();
Thread thread = new Thread(mt,"小A线程");
System.out.println("小A可以开始转账了~");
thread.start();
// 主线程休眠3秒
Thread.sleep(3000);
System.out.println("钱转完了,让小A停止!");
mt.isQuit = true;
}
}
(二)使用Thread.interrupted()(静态方法)或Thread对象的(成员方法)isInterrupted()
public class ThreadInterruptByMethod {
private static class MyThread implements Runnable{
@Override
public void run() {
// 1. 静态方法,判断当前线程是否被中断了
// while (Thread.interrupted()){
//2.成员方法,判断当前线程是否被中断了
while (Thread.currentThread().isInterrupted()){
System.out.println(Thread.currentThread().getName() + " 别烦我,正在转账呢~~");
try {
// 每次转账休眠1s
Thread.sleep(1000);
} catch (InterruptedException e) {
System.out.println("转账中断");
// 当线程被中断时,会抛出中断异常
// 抛出中断异常之后,中断状态就会还原!--》因为线程调用了sleep方法