### Java线程基础 #### 一、操作系统中的线程与进程概念 在现代操作系统中,多线程是一种常见的实现多任务的方式。对于操作系统而言: - **进程**:指的是内存中运行的一个应用程序。每个进程拥有自己独立的一块内存空间。例如,在Windows系统中,一个运行中的`.exe`文件即为一个进程。 - **线程**:是进程中的一个执行单元。一个进程中可以运行多个线程。例如,在`java.exe`进程中可以运行多个线程。 线程始终属于某个进程,并且同一进程中的多个线程共享进程的内存资源。尽管在我们的感知中这些线程似乎是同时执行的,但实际上它们是在不同时间片之间轮换执行的。 #### 二、Java中的线程概念 在Java中,“线程”通常指的是两个不同的概念: 1. **java.lang.Thread类的一个实例**:这是一个对象,它和其他Java对象一样,具有变量和方法,并存在于堆上。 2. **线程的执行**:这指的是线程的实际运行过程。 在Java中,可以通过以下两种主要方式来创建和启动线程: - **扩展`java.lang.Thread`类**:通过重写`Thread`类的`run()`方法来定义线程的行为。 - **实现`java.lang.Runnable`接口**:创建一个实现了`Runnable`接口的类,并在其`run()`方法中定义线程的行为。 每个Java应用都从`main()`方法开始执行,该方法运行在一个主线程中。创建新的线程时,就会为该线程分配一个新的调用栈。 #### 三、Java线程的分类 Java中的线程可以分为两类: - **用户线程**:由程序员直接或间接创建的线程。当所有的用户线程都执行完毕时,Java虚拟机(JVM)会自动关闭。 - **守护线程**:通常由操作系统或者用户自定义。守护线程的存在是为了服务用户线程,当所有用户线程结束时,守护线程也会随之终止。 ### Java线程的创建与启动 #### 1. 定义线程 定义线程有两种基本方式: - **扩展`java.lang.Thread`类**: - 重写`Thread`类的`run()`方法以定义线程的行为。 - **实现`java.lang.Runnable`接口**: - 实现`Runnable`接口的`run()`方法以定义线程的行为。 #### 2. 实例化线程 根据定义线程的方式不同,实例化线程也有两种方式: - 如果扩展了`java.lang.Thread`类,可以直接通过`new`关键字创建线程实例。 - 如果实现了`java.lang.Runnable`接口,则需要通过`Thread`类的构造函数来创建线程实例。例如: ```java Thread thread = new Thread(new MyRunnable()); ``` 其中,`MyRunnable`是一个实现了`Runnable`接口的类。 #### 3. 启动线程 启动线程的关键是调用`Thread`对象的`start()`方法。调用`start()`方法后会发生以下事件: - 新的执行线程被创建,并具有自己的调用栈。 - 该线程从新状态变为可运行状态。 - 当线程有机会执行时,其`run()`方法将被调用。 值得注意的是,直接调用`run()`方法并不会启动新的线程,而仅仅是像调用普通方法那样执行该方法。 #### 四、示例:实现`Runnable`接口的多线程程序 下面是一个简单的示例,展示了如何通过实现`Runnable`接口来创建多线程程序。 ```java public class DoSomething implements Runnable { private String name; public DoSomething(String name) { this.name = name; } @Override public void run() { for (int i = 0; i < 5; i++) { // 模拟耗时操作 for (long k = 0; k < 100000000; k++); System.out.println(name + ":" + i); } } } public class TestRunnable { public static void main(String[] args) { Thread thread1 = new Thread(new DoSomething("Thread 1")); Thread thread2 = new Thread(new DoSomething("Thread 2")); thread1.start(); thread2.start(); } } ``` 在这个示例中,我们创建了一个实现了`Runnable`接口的类`DoSomething`,并在其`run()`方法中定义了线程的行为。接着,我们在`main()`方法中创建了两个线程`thread1`和`thread2`,并通过调用`start()`方法启动这两个线程。 这个示例演示了Java中线程的基本创建和启动过程,是理解Java多线程编程的基础。
剩余81页未读,继续阅读
- 粉丝: 3
- 资源: 14
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助