引言:
java中的Thread类的相关常用方法及构造器介绍
构造器
- Thread() - 创建新的Thread对象 
- Thread(String threadname) - 创建线程并指定线程实例名 
- Thread(Runnable target) - 指定创建线程的目标对象,它实现了Runnable接口中的run方法 
- Thread(Runnable target, String name) - 指定创建线程的目标对象,它实现了Runnable接口中的run方法,并指定线程实例名 
有关方法
- void start() - 启动线程,并执行对象的run()方法 
- run() - 线程在被调度时执行的操作。通常需要重写Thread类中的此方法,将创建的线程要执行的操作声明在此方法中 
- void setName(String name) - 设置该线程的名称 
- String getName() - 获取当前线程的名字 
- static Thread currentThread() - 静态方法,返回执行当前代码的线程。在Thread子类中就是this,通常用于主线程和Runnable实现类。 
- static void yield() 线程让步 - 释放当前cpu的执行权,但是还是有可能再次被分到执行权
- 暂停当前正在执行的线程,把执行机会让给优先级相同或更高的线程
- 若队列中没有同优先级的线程,忽略此方法
 
- join() - 当某个程序执行流中调用其他线程的 join() 方法时,调用线程将被阻塞,直到 join() 方法加入的 join 线程执行完为止
- 在线程a中调用线程b的join(),此时线程a就进入阻塞状态,直到线程b完全执行完以后,线程a才结束阻塞状态
- join()抛出InterruptedException异常
- 低优先级的线程也可以获得执行
 
- static void sleep(long millitime)(指定时间:毫秒) - 令当前活动线程在指定时间段内放弃对CPU控制,使其他线程有机会被执行,时间到后重排队。
- 抛出InterruptedException异常
- 在指定的millitime毫秒时间内,当前线程是阻塞状态。
 
- stop() - 强制线程生命期结束,不推荐使用,已过时 
- boolean isAlive() - 返回boolean,判断线程是否还活着 
线程的优先级
- Thread类中的静态整形常量 public final static int - MAX_PRIORITY:10
- MIN _PRIORITY:1
- NORM_PRIORITY:5 –>默认优先级
 
- 如何获取和设置当前线程的优先级: - getPriority():获取线程的优先级
- setPriority(int p):设置线程的优先级
 
说明:高优先级的线程要抢占低优先级线程cpu的执行权。但是只是从概率上讲,高优先级的线程高概率的情况下被执行。并不意味着只有当高优先级的线程执行完以后,低优先级的线程才执行。
class HelloThread extends Thread {
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            if (i % 2 == 0) {
                try {
                    sleep(20);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                String threadName = getName();//Thread.currentThread().getName()
                int priority = getPriority();//Thread.currentThread().getPriority()
                System.out.println(threadName + ":" + priority + ":" + i);
            }
        }
    }
    public HelloThread(String name) {
        super(name);
    }
}
public class ThreadMethodTest {
    public static void main(String[] args) {
        HelloThread h1 = new HelloThread("thread-1");
        //设置分线程优先级
        h1.setPriority(Thread.MAX_PRIORITY);
        h1.start();
        //主线程命名
        Thread.currentThread().setName("主线程");
        Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
        for (int i = 0; i < 100; i++) {
            if (i % 2 == 0) {
                String threadName = Thread.currentThread().getName();
                int priority = Thread.currentThread().getPriority();
                System.out.println(threadName + ":" + priority + ":" + i);
            }
            if (i == 20) {
                try {
                    h1.join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
} 
                     
                     
                        
                        