Thread线程类

创建线程类

java使用java.lang.Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例。每个线程的作用是完成一定的任务,实际上就是执行一段程序流即一段顺序执行的代码。java使用线程执行体来代表这段程序流。java中通过继承Thread类来创建启动多线程的步骤如下:

  1. 定义Thread类的子类,并重写该类的run() 方法,该run()方法的方法体就代表了线程需要完成的任务,因此把run()方法称为线程执行体
  2. 创建Thread子类的实例,即创建了线程对象
  3. 调用线程对象的start()方法来启动该线程,执行其中的run方法

void start() 使该线程开始执行;java虚拟机调用该线程的run方法。

结果是多个线程并发地运行;当前线程(main线程)和另一个线程(创建的新线程,执行其run方法)。

多次启动一个线程是非法的。特别是当线程已经结束执行后,不能再重新启动。

java程序属于抢占式调度,哪个线程的优先级高,哪个线程优先执行;同一个优先级,随机选择一个执行

Thread的实例

1
2
3
4
5
6
7
8
9
10
11
12
13
public class MyThread extends Thread{
@Override
public void run(){
for (int i = 0; i < 5; i++) {
System.out.println("自定义线程执行");
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
1
2
3
4
5
6
7
8
9
10
public class Main {
public static void main(String[] args) throws InterruptedException {
MyThread thread = new MyThread();
thread.start();
for (int i = 0; i < 5; i++) {
System.out.println("main线程在执行");
Thread.sleep(1);
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
结果:
main线程在执行
自定义线程执行
main线程在执行
自定义线程执行
main线程在执行
自定义线程执行
main线程在执行
自定义线程执行
自定义线程执行
main线程在执行

进程已结束,退出代码 0

多线程的原理和好处

多个线程在不同的栈空间,所以多个线程之间互不影响

获取线程的名字

1
2
3
4
5
public class DemoGetThreadName {
public static void main(String[] args) {
System.out.println(Thread.currentThread().getName());
}
}

Thread类常用方法

API中该类中定义了有关线程的一些方法,具体如下:

构造方法:

  • public Thread() : 分配一个新的线程对象。
  • public Thread(String name): 分配一个指定名字的新的线程对象
  • public Thread(Runnable target): 分配一个带有指定目标的新的线程对象
  • public Thread(Runnable target,String name): 分配一个带有指定目标的新的线程对象并指定名字

常用方法:

  • public String getName(): 获取当前线程名称
  • public void start():导致这个线程进入就绪状态,等待虚拟机调度,执行其中的run()方法
  • public void run():此线程要执行的任务在此处定义代码
  • public static void sleep(long millis):是Thread类的一个静态方法,使当前线程休眠,进入阻塞状态(暂停执行),如果线程在睡眠状态被中断,将会抛出IterruptedException中断异常 注意:在哪个线程里面调用sleep()方法就阻塞哪个线程。
  • public static Thread currentThread(): 返回对当前正在执行的线程对象的引用。在哪个线程中就返回哪个线程的对象引用。

Thread线程类
https://blog.wangxk.cc/2020/08/30/Thread线程类/
作者
Mike
发布于
2020年8月30日
许可协议