线程的常用方法
- setName // 设置线程名称,使之与参数name相同
- getName // 返回该线程名称
- start // 使线程开始执行,java虚拟机底层调用线程的start0()方法
- run // 调用该线程的run方法
- setPriority //更改线程的优先级
- getPriority // 获取线程的优先级
- sleep // 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)
- interrupt // 中断线程
常用方法的练习
package com.yuecheng.hspedu.exit.method;
public class ThreadMethod01 {
public static void main(String[] args) throws InterruptedException {
ThreadDemo01 threadDemo01 = new ThreadDemo01();
threadDemo01.setName("婉茹");
threadDemo01.setPriority(Thread.MIN_PRIORITY);
threadDemo01.start();
for (int i = 0; i < 5; i++) {
Thread.sleep(1000);
System.out.println("hi "+i);
System.out.println(threadDemo01.getName()+"threadDemo01线程的优先级是"+threadDemo01.getPriority());
}
threadDemo01.interrupt();
}
}
class ThreadDemo01 extends Thread{
@Override
public void run() {
int count= 0 ;
while(true){
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName()+"狂吃了"+i+"个包子");
}
try {
System.out.println(Thread.currentThread().getName()+"线程休眠中"+count++);
Thread.sleep(20000);
} catch (InterruptedException e) {
System.out.println(Thread.currentThread().getName()+ "被interrupt了");
}
}
}
}
注意事项
- start底层会创建新的线程,如果直接用对象调用run,run就是一个简单的方法调用,不会创建新的线程。
- 线程的优先级范围:
- interrupt,中断线程,但没有真正结束线程,所以一般用于唤醒休眠的线程。
- sleep:线程的静态方法,使当前线程休眠。
常用方法第二组
1.yield:线程的礼让。让出cpu,让其他线程执行,但礼让的时间不确定,所以也不一定成功。
2.join:线程的插队。插队的线程一旦插队成功则肯定先执行完插队的线程的所有的任务。
- 案例:创建一个子线程,每隔1s输出hello,输出20次,主线程每隔1s,输出hi输出20次。要求:两个线程同时执行,当主线程输出5次后,就让子线程运行完毕,主线程再继续。
package com.yuecheng.hspedu.exit.method;
public class ThreadMethod022 {
public static void main(String[] args) throws InterruptedException {
A1 a1 = new A1();
Thread t1 = new Thread(a1);
t1.start();
for (int i = 1; i <=20; i++) {
System.out.println("hi "+i);
Thread.sleep(500);
if(i==5){
System.out.println("主线程已经输出了"+i+"个hi");
t1.join();
}
}
}
}
class A1 implements Runnable{
@Override
public void run() {
int i =1;
while(i<=20){
System.out.println("hello "+i);
i++;
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
|