Java中Thread类的有关方法


  

引言:

java中的Thread类的相关常用方法及构造器介绍

构造器

  1. Thread()

    创建新的Thread对象

  2. Thread(String threadname)

    创建线程并指定线程实例名

  3. Thread(Runnable target)

    指定创建线程的目标对象,它实现了Runnable接口中的run方法

  4. Thread(Runnable target, String name)

    指定创建线程的目标对象,它实现了Runnable接口中的run方法,并指定线程实例名

有关方法

  1. void start()

    启动线程,并执行对象的run()方法

  2. run()

    线程在被调度时执行的操作。通常需要重写Thread类中的此方法,将创建的线程要执行的操作声明在此方法中

  3. void setName(String name)

    设置该线程的名称

  4. String getName()

    获取当前线程的名字

  5. static Thread currentThread()

    静态方法,返回执行当前代码的线程。在Thread子类中就是this,通常用于主线程和Runnable实现类。

  6. static void yield() 线程让步

    • 释放当前cpu的执行权,但是还是有可能再次被分到执行权
    • 暂停当前正在执行的线程,把执行机会让给优先级相同或更高的线程
    • 若队列中没有同优先级的线程,忽略此方法
  7. join()

    • 当某个程序执行流中调用其他线程的 join() 方法时,调用线程将被阻塞,直到 join() 方法加入的 join 线程执行完为止
    • 在线程a中调用线程b的join(),此时线程a就进入阻塞状态,直到线程b完全执行完以后,线程a才结束阻塞状态
    • join()抛出InterruptedException异常
    • 低优先级的线程也可以获得执行
  8. static void sleep(long millitime)(指定时间:毫秒)

    • 令当前活动线程在指定时间段内放弃对CPU控制,使其他线程有机会被执行,时间到后重排队。
    • 抛出InterruptedException异常
    • 在指定的millitime毫秒时间内,当前线程是阻塞状态。
  9. stop()

    强制线程生命期结束,不推荐使用,已过时

  10. boolean isAlive()

    返回boolean,判断线程是否还活着

线程的优先级

  1. Thread类中的静态整形常量 public final static int

    • MAX_PRIORITY:10
    • MIN _PRIORITY:1
    • NORM_PRIORITY:5 –>默认优先级
  2. 如何获取和设置当前线程的优先级:

    • 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();
                }
            }
        }
    }
}

文章作者: YangChongZhi
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 YangChongZhi !
评论
 上一篇
Java中Thread类和Runnable接口的使用举例 Java中Thread类和Runnable接口的使用举例
   引言: java中用Thread类和实现Runnable接口的方式都可以创建线程,但实现Runnable接口的方式更适合用来处理多个线程有共享数据的情况。 创建三个窗口卖票,总票数为100张使用继承Thread类的方式存在线程的安全
2021-01-06
下一篇 
Java中多线程的创建 Java中多线程的创建
   引言: java中可以通过继承Thread类或实现Runnable接口来创建所线程。 方式一:继承于Thread类 创建一个继承于Thread类的子类 重写Thread类的run() –> 将此线程执行的操作声明在run()中
2021-01-05
  目录