线程启动
start:
start方法内部,会调用到系统api,来在系统中创建出线程。
run方法,只是单纯的描述了该线程要执行的内容。(会在start创建好县城之后自动被调用)
终止线程
让一个线程停止运行(销毁),让run方法尽快执行结束
在代码中手动创建出标志位,来作为run执行结束的条件
public class Demo8 {
private static boolean isQuit=false;
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread( ()->{
while (!isQuit){
System.out.println("线程工作中");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("线程工作完成");
});
t.start();
Thread.sleep(5000);
isQuit=true;
System.out.println("设置isQuit为true");
}
}
1.需要手动创建变量
2.当线程内部在sleep的时候,主线程修改变量,新线程内部不能及时响应。
package thread;
//线程终止
public class Demo9 {
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread(()->{
//Thread类内部,有一个现成的标志位,可以用来判定当前循环是否要结束
while(!Thread.currentThread().isInterrupted()){
System.out.println("线程工作中");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
t.start();
Thread.sleep(5000);
System.out.println("让t线程终止");
t.interrupt();
}
}
package thread;
//线程终止
public class Demo9 {
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread(()->{
//Thread类内部,有一个现成的标志位,可以用来判定当前循环是否要结束
while(!Thread.currentThread().isInterrupted()){
System.out.println("线程工作中");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
//1.假装没听见,循环继续正常执行
e.printStackTrace();
//2.加上一个break,表示让线程立即结束
//break;
//3.做一些工作,完成之后再结束
//其他工作代码
break;
}
}
});
t.start();
Thread.sleep(5000);
System.out.println("让t线程终止");
t.interrupt();
}
}
线程等待
让一个线程等待另一个线程执行结束,再继续执行。(控制线程结束的顺序)
join实现线程等待
主线程中调用t.join(),此时是主线程等待t线程先结束