Thread类及常见方法

目录

1.Thread类

2.Thread类的常见构造方法

3.Thread类的常见属性

4.启动一个线程 - start()

5.等待一个线程-join()

6.休眠一个线程-sleep()

7.获取当前的线程引用


序列:多线程 - 003

1.Thread类

定义:Thread 类是 JVM ⽤来管理线程的⼀个类,换句话说,每个线程都有⼀个唯⼀的 Thread 对像与之关联。

对于每个执⾏流,需要有⼀个对象来描述,类似下图所⽰,⽽ Thread 类的对象就是⽤来描述⼀个线程执⾏流的,JVM 会将这些 Thread 对象组织起来,⽤于线程调度,线程管理。

Thread类及常见方法_第1张图片

2.Thread类的常见构造方法

方法: 说明:
Thread ( ) 创建线程对象
Thread(Runnable  target) 使用实现Runnable接口的类的对象创建线程对象
Thread(String  "name") 创建线程对象并命名
Thread(Runnable  target , String  "name") 使用实现Runnable接口的类的对象创建线程,并命名

Example:

  • Thread t1 = new Thread();
  • Thread t2 = new Thread(new MyRunnable());
  • Thread t3 = new Thread("线程名称");
  • Thread t4 = new Thread(new MyRunnable(), "线程名称");

3.Thread类的常见属性

属性: 获取方法:
ID getId()
名称 getName()
状态 getState()
优先级 getPriority()
是否后台线程 isDaemon()
是否存活 isAlive()
是否被中段 isInterrupted()

  • ID 是线程的唯⼀标识,不同线程不会重复
  • 名称是各种调试⼯具⽤到;
  • 状态表⽰线程当前所处的⼀个情况;
  • 优先级⾼的线程理论上来说更容易被调度到;
  • 一个java进程中,前台线程没有结束,则整个进程不会结束
  • 一个java进程中,后台线程不结束,不影响整个进程的结束
  • JVM会在⼀个进程的所有非后台线程结束后,才会结束运行;
  • 是否存活,即简单的理解,run ⽅法是否运⾏结束了。
Example:
public class ThreadAttribute {//线程属性类
    public static void main(String[] args) {
        Thread thread = new Thread(()->{//lambda表达式创建线程
            for (int i = 0; i < 10; i++) {
                System.out.println(Thread.currentThread().getName() + "线程正在运行...");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
            System.out.println(Thread.currentThread().getName() + "线程运行结束...");
        });
        thread.start();//启动线程thread
        System.out.println("线程ID:"+Thread.currentThread().getId());
        System.out.println("线程name:"+Thread.currentThread().getName());
        System.out.println("线程状态:"+Thread.currentThread().getState());
        System.out.println("线程优先级:"+Thread.currentThread().getPriority());
        System.out.println("线程后台线程:"+Thread.currentThread().isDaemon());
        System.out.println("线程存活:"+Thread.currentThread().isAlive());
        System.out.println("线程中断:"+Thread.currentThread().isInterrupted());
    }
}

4.启动一个线程 - start()

重写run()方法是提供给线程要做的事,会在start()创建并开始运行线程之后,自动被调用。

调用start()方法,才是真正的在操作系统中创建出一个线程并开始运行。

public class Deom {
    public static void main(String[] args) {
        Thread thread = new Thread(()->{//采用lambda表达式创建线程对象
            System.out.println("这是一个线程A...");
        });
        thread.start();//调用start()方法创建出thread线程并运行
        System.out.println("这是main线程...");
    }
}

5.等待一个线程-join()

让一个线程去等待另一个线程执行结束,再继续执行;本质上是控制线程结束的顺序。

让main线程等待thread01和thread02线程运行结束之后再打印n和m的值。代码如下:

public class aaa {
    public static int n = 0;
    public static int m = 0;
    public static void main(String[] args) throws InterruptedException {
        Thread thread01 = new Thread(()->{
            for (int i = 0; i < 100; i++) {
                n++;
            }
        });
        Thread thread02 = new Thread(()->{
            for (int i = 0; i < 100; i++) {
                m++;
            }
        });
        thread01.start();//启动线程thread01
        thread02.start();//启动线程thread02
        thread01.join();//main线程线程等待thread01
        thread02.join();//main线程线程等待thread02
        System.out.println("n的值为:" + n);
        System.out.println("m的值为:" + m);
    }
}

等待效果:main线程调用join()方法,执行thread.join()语句,此时就是main线程等待thread线程先结束,直到thread线程运行结束。

//在main方法中
...  
     thread.start();
     thread.join(); //main线程阻塞,thread线程运行
...

join()默认是“死等”,一般来说等待的操作都是带一个“超时时间”。

方法 说明
public void join() 等待线程结束,“死等”
public void join(long millis) 等待线程结束,最对等millis毫秒
public void join(long millis,int nanos) 等待线程结束,最多等millis毫秒,nanos微秒

6.休眠一个线程-sleep()

方法 说明
public static void sleep(long millis) throws InterruptedException 休眠当前线程millis毫秒
public static void sleep(long millis,int nanos) throws InterruptedException 休眠当前线程millis毫秒,nanos纳秒
public class aaa {
    public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(()->{
            try {
                Thread.sleep(3000);//sleep()休眠当前线程3秒钟
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            System.out.println("这是thread线程...");
        });
        thread.start();//启动线程thread
    }
}

7.获取当前的线程引用

方法 说明
public static Thread currentThread(); 返回当前的线程的引用
public class aaa {
    public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(()->{
            System.out.println(Thread.currentThread());//打印thread线程
        });
        thread.start();//启动线程thread
        System.out.println(Thread.currentThread());//打印main线程
    }
}

以上便是Thread类的基本方法与属性。

你可能感兴趣的:(JavaEE,(初阶),java,开发语言)