线程的创建和使用

简介: 线程的创建和使用

线程的创建和使用

Java语言的JVM允许程序运行多个线程,它通过java.lang.Thread 类来体现

Thread类的特性

  • 每个线程都是通过某个特定Thread对象的run()方法来完成操作的,经常 把run()方法的主体称为线程体
  • 通过该Thread对象的start()方法来启动这个线程,而非直接调用run()

Thread类

  • 构造器

Thread():创建新的Thread对象

Thread(String threadname):创建线程并指定线程实例名

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

Thread(Runnable target, String name):创建新的Thread对象

API中创建线程的两种方式

JDK1.5之前创建新执行线程有两种方法:

  • 继承Thread类的方式
  • 实现Runnable接口的方式

方式一:继承Thread类

思路:

  1. 定义子类继承Thread类。
  2. 子类中重写Thread类中的run方法。
  3. 创建Thread子类对象,即创建了线程对象。
  4. 调用线程对象start方法:启动线程,调用run方法

举例:

image.png

注意

  1. 如果自己手动调用run()方法,那么就只是普通方法,没有启动多线程模式。
  2. run()方法由JVM调用,什么时候调用,执行的过程控制都有操作系统的CPU 调度决定。
  3. 想要启动多线程,必须调用start方法。
  4. 一个线程对象只能调用一次start()方法启动,如果重复调用了,则将抛出以上 的异常“IllegalThreadStateException”。

方式二:实现Runnable接口

思路:

  1. 定义子类,实现Runnable接口。
  2. 子类中重写Runnable接口中的run方法。
  3. 通过Thread类含参构造器创建线程对象。
  4. 将Runnable接口的子类对象作为实际参数传递给Thread类的构造器中。
  5. 调用Thread类的start方法:开启线程,调用Runnable子类接口的run方法。

继承方式和实现方式的联系与区别

public class Thread extends Object implements Runnable

  • 继承Thread:线程代码存放Thread子类run方法中。
  • 实现Runnable:线程代码存在接口的子类的run方法。

实现方式的好处

  • 避免了单继承的局限性
  • 多个线程可以共享同一个接口实现类的对象,非常适合多个相同线 程来处理同一份资源
相关文章
|
调度
线程都有哪些方法?
线程都有哪些方法?
57 0
|
2月前
|
Java API 调度
线程的操作
本文详细介绍了线程的开启、终止、等待和休眠。首先解释了`start`与`run`的区别:`start`用于真正创建线程并调用系统API,而`run`则是线程执行的具体任务。接着讨论了线程终止的两种方式:通过共享标记和调用`interrupt()`方法。文中还分析了使用`join()`方法实现线程等待的机制,并展示了如何通过`Thread.sleep()`让线程休眠以降低CPU占用率。这些内容通过实例代码和图示进行了清晰说明。
31 0
线程的操作
|
19天前
|
安全 Java 调度
线程的四种创建方式
【10月更文挑战第22天】在多线程编程中,还需要注意线程安全、死锁等问题,以确保程序的正确性和稳定性。通过合理地运用线程创建方式和相关技术,我们可以充分发挥多线程的优势,提高程序的性能和并发处理能力。
|
C++
线程的2种创建方式
当一个类继承了Thread类,该类就可以当作线程使用。 run方法其实是一个普通方法,是Runnable接口的一个方法。 Thread类也是进行了重写。 真正实现多线程的start方法中的start0方法。 这是一个本地native方法,由c/c++实现。
84 0
|
Java 调度
进程和线程、实现多线程的两种方式、设置获取线程名称、线程优先级及线程控制
进程和线程、实现多线程的两种方式、设置获取线程名称、线程优先级及线程控制的简单示例
134 1
进程和线程、实现多线程的两种方式、设置获取线程名称、线程优先级及线程控制
|
Java 调度
join线程执行结束之后,并没有看到哪里有notify方法,请问此时谁去唤醒等待池中的线程
Java中的join方法,阻塞当前线程,直到join线程结束后才继续执行。底层是通过wait来实现的,join线程执行结束之后,并没有看到哪里有notify方法,请问此时谁去唤醒等待池中的线程(join之前的那个“当前”线程)呢?
102 0
join线程执行结束之后,并没有看到哪里有notify方法,请问此时谁去唤醒等待池中的线程
|
设计模式 监控 安全
Java多线程(完整版)、基本概念:程序、进程、线程、线程的创建和使用、线程的生命周期、线程的同步、线程的通信、JDK5.0新增线程创建方式、wait(),notify(),notifyAll()
Java多线程(完整版)、基本概念:程序、进程、线程、线程的创建和使用、线程的生命周期、线程的同步、线程的通信、JDK5.0新增线程创建方式、wait(),notify(),notifyAll()
Java多线程(完整版)、基本概念:程序、进程、线程、线程的创建和使用、线程的生命周期、线程的同步、线程的通信、JDK5.0新增线程创建方式、wait(),notify(),notifyAll()
|
开发框架 Java .NET
干货分享:详解线程的开始和创建
干货分享:详解线程的开始和创建
102 0
干货分享:详解线程的开始和创建