目录
一、线程终止
基本说明
应用案例
二、线程中断
三、线程插队
应用案例
线程常用方法
一、线程终止
-
基本说明
- 当线程完成任务后,会自动退出
- 还可以通过使用变量来控制run方法退出的方式停止线程,即通知方式
-
应用案例
public class ThreadExit_ {
public static void main(String[] args) throws InterruptedException {
T t1 = new T();
t1.start();
//如果希望main线程去控制t1线程得终止,必须修改loop
//让t1退出run方法,从而终止t1线程
//让主线程休眠5秒,再通知t1线程终止
Thread.sleep(5*1000);
t1.setLoop(false);
}
}
class T extends Thread {
private int count = 0;
//设置一个控制变量
private boolean loop = true;
@Override
public void run() {
while(loop) {
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程"+Thread.currentThread().getName()+(++count ));
}
}
public void setLoop(boolean loop) {
this.loop = loop;
}
}
基本说明
应用案例
运行结果:
执行5秒后通知子线程退出
二、线程中断
主要运用到yield()方法
三、线程插队
应用案例package interrupt_;
//main线程创建一个子线程,每隔一秒输出hello,输出5次,主线程每隔一秒,输出hi,输出5次
//要求:两个线程同时执行,当主线程输出2次后,就让子线程运行完毕,主线程再继续
public class ThreaadMethod02 {
public static void main(String[] args) throws InterruptedException {
T2 t2 = new T2();
t2.start();
for (int i = 1;i<=5;i++) {
Thread.sleep(1000);
System.out.println("主线程吃了" + i + "个包子");
if(i == 2){
t2.join();//子线程插队,子线程执行完毕后主线程继续执行
}
}
}
}
class T2 extends Thread {
@Override
public void run() {
for(int i = 1;i<=5;i++){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("子线程吃了" + i + "个包子");
}
}
}
运行结果
线程常用方法
1.setName 设置线程名称,使之与参数 name 相同
2.getName 返回该线程的名称
3.start 使该线程开始执行;Java 虚拟机底层调用该线程的 start0 方法
4.run 调用线程对象run方法;
5.setPriority 更改线程的优先级
6.getPriority 获取线程的优先级
7.sleep 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)
8.interrupt 中断线 程
9.yield 线程的礼让。让出cpu,让其他线程执行,但礼让的时间不确定,
所以也不一定礼让成功
10.join 线程的插队。插队的线程一旦插队成功,则肯定先执行完插入的线程所有的 任务
注意事项和细节
1.start底层会创建新的线程,调用run,run就是一个简单的方法调用,不会启动新的线程
2.线程优先级的范围
3.interrupt,中断线程,但并没有真正的结束线程。所以一般用于中断正在休眠的线程
4.sleep:线程的静态方法,使当前的 线程休眠



