Java多线程:start()与run()的差异及ThreadLocal解析
166 浏览量
更新于2024-08-28
收藏 86KB PDF 举报
"Java多线程总结,包括Thread.start()与Thread.run()的区别以及ThreadLocal类的简要介绍。"
在Java多线程编程中,理解如何启动和控制线程至关重要。这里主要讨论了`Thread.start()`和`Thread.run()`两个方法的不同作用。
一、`Thread.start()`与`Thread.run()`的区别
`Thread.start()`方法用于启动一个新的线程。当调用`start()`时,线程进入就绪状态,等待操作系统分配CPU时间片执行。一旦得到执行机会,它会调用该线程的`run()`方法。`run()`方法包含了线程的主要业务逻辑,即线程体。当`run()`方法执行完毕,该线程生命周期结束,CPU会转而执行其他线程。
相反,如果直接调用`Thread.run()`,那么不会创建新的线程,而是将`run()`方法作为普通方法在同一(通常是主线程)线程中执行,程序执行路径仍然是单一的,失去了多线程的意义。这一点可以通过测试代码清晰地看出。
例如,以下代码演示了两种情况的差异:
```java
public class MyThread implements Runnable {
public void run() {
System.err.println(Thread.currentThread().getName());
}
public static void main(String[] args) {
MyThread thread = new MyThread();
Thread t1 = new Thread(thread, "Thread-1");
Thread t2 = new Thread(thread, "Thread-2");
// 直接调用run()方法
t1.run();
t2.run();
// 使用start()方法启动线程
t1.start();
t2.start();
}
}
```
直接调用`run()`会输出两次"主线程",而使用`start()`会看到两个不同的线程名,表明它们在各自的线程中独立执行。
二、`ThreadLocal`类详解
`ThreadLocal`是Java中一个非常有用的工具类,它为每个线程都提供了独立的变量副本,避免了线程间的数据冲突。`ThreadLocal`并不是一个本地线程,而是提供了一个线程局部变量的概念。每个线程都有自己的`ThreadLocal`变量副本,这些副本之间相互独立,互不影响。
`ThreadLocal`的主要操作方法有:
1. `set(T value)`:为当前线程设置`ThreadLocal`变量的值。
2. `get()`:获取当前线程的`ThreadLocal`变量的值。
3. `remove()`:移除当前线程的`ThreadLocal`变量。
使用`ThreadLocal`的一个常见场景是为每个线程提供一个独立的上下文对象,如HTTP请求处理中的用户会话信息或数据库连接。这样可以确保每个线程都有自己的独立数据,不会因并发访问导致数据混乱。
理解`Thread.start()`和`Thread.run()`的正确用法是实现多线程的关键,而`ThreadLocal`则提供了一种有效的线程安全数据管理方式。在Java多线程编程中,这两个概念都是不可忽视的重要知识点。
2013-03-06 上传
2013-05-08 上传
2019-04-06 上传
2023-07-24 上传
2023-09-13 上传
2023-05-28 上传
2023-08-02 上传
2023-07-21 上传
2023-08-22 上传
weixin_38715879
- 粉丝: 4
- 资源: 922
最新资源
- Java集合ArrayList实现字符串管理及效果展示
- 实现2D3D相机拾取射线的关键技术
- LiveLy-公寓管理门户:创新体验与技术实现
- 易语言打造的快捷禁止程序运行小工具
- Microgateway核心:实现配置和插件的主端口转发
- 掌握Java基本操作:增删查改入门代码详解
- Apache Tomcat 7.0.109 Windows版下载指南
- Qt实现文件系统浏览器界面设计与功能开发
- ReactJS新手实验:搭建与运行教程
- 探索生成艺术:几个月创意Processing实验
- Django框架下Cisco IOx平台实战开发案例源码解析
- 在Linux环境下配置Java版VTK开发环境
- 29街网上城市公司网站系统v1.0:企业建站全面解决方案
- WordPress CMB2插件的Suggest字段类型使用教程
- TCP协议实现的Java桌面聊天客户端应用
- ANR-WatchDog: 检测Android应用无响应并报告异常