1.构造器
- public Thread() : 创建一个线程对象.
- public Thread(String name) : 分配一个指定名字的线程对象
- public Thread(Runnable target) : 创建了目标线程的对象,并实现了Runnable接口的run()方法.
- public Thread(Runnable target, String name) : 分配一个带有指定目标(实现接口)的线程对象,并指定了一个名字.
2.常用方法
- public void run() : 此线程要指定的任务在此处定义代码.
- public void start() : 启动此线程,java虚拟机调用此线程的run().
- public static Thread currentThread() : 返回对当前执行的线程对象的引用.
- public String getName() : 获取当前线程对象的名字.
- public void setName() : 设置当前线程对象的名字.
- public static void sleep(lomg mills) : 使当前代码执行的线程以毫秒数暂停.(静态方法 : 与对象调用无关,与在哪个线程调用有关)
- public static void yield() : 执行该方法,释放该线程的CPU执行权,让系统的线程调度器重新调度一次.
- void join() : 等待该线程终止.
- (重载)void join(long mills) : 等待该线程终止的时间最长为mills毫秒.
- public final boolean isAlive() : 测试线程是否处于活跃状态.
- (过时方法)public final void stop() : 强制结束一个线程的执行,直接进入Dead状态
public class SingerTest { public static void main(String[] args) { //构造器赋值 SinThread s = new SinThread("线程1"); //steXxx方法赋值 s.setName("线程-1"); s.start(); for (int i = 0; i <= 100; i++) { if (i % 2 == 1) { System.out.println(Thread.currentThread().getName() + "\t\t" + i); } } } } class SinThread extends Thread{ public SinThread() { super(); } public SinThread(String name) { super(name); } @Override public void run() { for (int i = 0; i <= 100; i++) { if (i % 2 == 0) { System.out.println(Thread.currentThread().getName() + "\t\t" + i); } } } } 控制台 线程-1 0 main 1 线程-1 2 main 3 main 5 main 7 main 9 线程-1 4 略
调用sleep()方法 : 该方法是static方法,与对象调用无关,与处在哪个线程调用该方法有关.该处在main线程调用sleep方法,故暂停主线程10000ms.
接上 try { //sleep()源码 : public static native void sleep(long millis) throws InterruptedException; s.sleep(10000); } catch (InterruptedException e) { throw new RuntimeException(e); } s.start(); 暂停主线程,故线程-1调用CPU概率更高 控制台 线程-1 0 线程-1 2 线程-1 4 线程-1 6 线程-1 8 线程-1 10 略 10s后 main 1 main 3 main 5 main 7 main 9 main 11
调用join()方法 :
s.start(); try { s.join(); } catch (InterruptedException e) { throw new RuntimeException(e); } 调用join()方法,直到s线程执行完,主线程才开始执行 控制台 线程-1 0 线程-1 2 线程-1 4 线程-1 6 线程-1 8 线程-1 10 线程-1 12 线程-1 14 线程-1 16 线程-1 18 略
3.线程优先级
每个线程都要一定的优先级,同优先级线程组成先进先出队列,使用分时调度策略.优先级高的线程采用抢占式调度策略,有更多的执行机会,只是多了机会,并不是一定就执行优先级高的线程.每个线程的优先级都与创建他的父线程具有相同的优先级.
优先级常量 :
- MAX_PRIORITY(10)最高优先级
- NORM_PRIORITY(5)普通优先级
- MIN_PRIORITY(1)最低优先级
public final int getPriority() : 返回线程优先级.
public final void setPriority(int newPriority) : 设置线程优先级,范围1-10.
4.线程的生命周期
计时等待 TIMED_WAITING 新建 ----------> 准备 ---------->运行 ----------->死亡 New Ready Running Dead 锁阻塞 无线等待 BLOCKED WAITING