Java线程(上).pdf 东方标准 多线程
### Java线程(上)—— 东方标准 多线程 #### 目标 - 了解线程概念 - 了解线程模型 - 掌握线程创建与启动 - 理解线程状态 - 掌握线程的调度方法 #### 多线程基本概念 在计算机科学中,**多线程**是一种允许单个程序执行多个并发任务的技术。与多进程相比,多线程在同一应用程序内共享内存空间,因此线程间的通信更加高效。多进程是指操作系统能够同时运行多个独立的任务(或程序),每个任务拥有自己的独立内存空间。 #### Java线程模型 Java线程模型的核心是`java.lang.Thread`类。线程模型通常包括以下几个部分: 1. **虚拟的CPU**:这是Java虚拟机的一部分,用于模拟CPU的执行过程。 2. **代码**:要执行的Java代码。 3. **数据**:代码操作的数据。 4. **虚拟CPU**:负责执行代码并处理数据。 #### 创建线程 在Java中,可以通过以下两种主要方式创建线程: ##### 方式1:继承Thread类 这种方式通过定义一个新的类并继承`Thread`类来创建线程。然后,重写`run()`方法,其中包含线程要执行的具体逻辑。这种方法的优点在于编写较为简单,可以直接访问线程的方法,但缺点是不能继承其他类,因为Java不支持多重继承。 ```java public class TestThread extends Thread { public void run() { for (int i = 0; i < 100; i++) { System.out.println("Count: " + i); } } public static void main(String[] args) { TestThread tt = new TestThread(); tt.start(); } } ``` ##### 方式2:实现Runnable接口 这种方式更为灵活,适用于需要继承其他类的情况。定义一个实现`Runnable`接口的类,并实现`run()`方法。然后,通过构造`Thread`对象并将`Runnable`对象作为参数传入来创建线程。 ```java public class RunnableThread implements Runnable { public void run() { for (int k = 0; k < 10; k++) { System.out.println("Count: " + k); } } public static void main(String[] args) { RunnableThread rt = new RunnableThread(); Thread t = new Thread(rt); t.start(); } } ``` #### 两种线程创建方式的比较 - **使用Runnable接口**: - 可以将CPU、代码和数据分开,形成更清晰的模型。 - 可以从其他类继承,提高代码复用性。 - 保持了程序风格的一致性。 - **直接继承Thread类**: - 编写简单,可以直接操纵线程。 - 不再支持继承其他类。 - 需要使用`Thread.currentThread()`来获取当前线程的信息。 #### 线程状态 线程在其生命周期中会经历多种状态,主要包括: - **创建状态(New)**:当创建了一个新的线程对象时,它处于创建状态。此时,系统并未为其分配资源,只有调用`start()`方法后才能进入可运行状态。 - **可运行状态(Runnable)**:线程被启动后,即调用`start()`方法后,线程进入可运行状态,等待被调度执行。 - **不可运行状态(Not Runnable)**:线程可能因为等待某些事件而进入不可运行状态,例如调用`sleep()`、`wait()`等方法。 - **死亡状态(Dead)**:线程结束运行的方式有两种:自然撤消和强制停止。自然撤消是指线程正常执行完`run()`方法后退出;强制停止则是通过调用`stop()`方法强制终止线程。 #### 线程调度 线程调度是指操作系统如何决定下一个要执行的线程。Java中的线程调度是基于优先级的,但也受到操作系统的调度策略的影响。Java线程的优先级可以通过`setPriority()`方法设置,但实际的调度结果取决于具体的平台和操作系统。 #### 示例 以下是一个简单的线程状态示例,演示了线程在运行过程中状态的变化。 ```java public class ThreadStateExample { public static void main(String[] args) throws InterruptedException { Thread thread = new Thread(new Runnable() { @Override public void run() { for (int i = 0; i < 30; i++) { if (i % 10 == 0 && i != 0) { try { System.out.println("Before sleeping: " + Thread.currentThread().getName() + " is " + Thread.currentThread().isAlive()); Thread.sleep(2000); System.out.println("After sleeping: " + Thread.currentThread().getName() + " is " + Thread.currentThread().isAlive()); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("No." + i); } } }); thread.start(); } } ``` 在这个例子中,我们创建了一个新线程并让其每隔10次计数后暂停2秒。这期间,线程的状态会从可运行状态变为不可运行状态,然后再回到可运行状态。通过`Thread.currentThread().isAlive()`可以检查线程是否还处于活动状态。
剩余22页未读,继续阅读
- 粉丝: 2710
- 资源: 92
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 【岗位说明】生产副总经理岗位职责说明书.doc
- 【岗位说明】生产部岗位说明书(14个岗位).doc
- 【岗位说明】瓦抽专工岗位说明书.doc
- 【岗位说明】瓦抽队长岗位说明书.doc
- 【岗位说明】生产工人岗位职责.doc
- 【岗位说明】一致门窗厂员工奖惩制度.doc
- 【岗位说明】橡胶密封件企业岗位职责说明书.doc
- 【岗位说明】照明公司岗位职责.doc
- 【岗位说明】职位说明书机械工程师.doc
- 【岗位说明】职位说明书范本大全14个生产职位.doc
- 【岗位说明】门窗厂岗位职责02.docx
- 新能源汽车电机控制器功能规范:包括:功能列表;系统架构can;软件架构;硬件架构;EMC方案主要包括高压滤波器方案、结构布局和屏蔽方案、控制板方案、模块方案;系统接口;系统运行模式;系统功能结构;系统
- 内核级后门RootKit技术总揽pdf版最新版本
- 【岗位说明】风控部门职责及风险首席官岗位说明书.docx
- 【岗位说明】风险管理岗职位要求.doc
- 【岗位说明】风险控制岗位职责02.doc