Java并发编程:实现Runnable与Thread类
需积分: 9 28 浏览量
更新于2024-09-10
收藏 303KB PDF 举报
"java并发编程笔记"
Java并发编程是Java开发中的重要组成部分,它涉及到如何让多个任务在同一时间执行,以提高程序的效率和响应性。在Java中,实现并发有多种方式,其中最常见的是通过实现`Runnable`接口和继承`Thread`类。
1. 实现Runnable接口
这种方式下,你创建一个实现了`Runnable`接口的类,然后在`run()`方法中编写线程执行的代码。这种方式的好处在于,由于Java不支持多重继承,因此你可以避免因为继承`Thread`而无法继承其他类的问题。此外,通过将`Runnable`对象传递给`Thread`的构造函数,你可以创建多个`Thread`实例来共享同一个`Runnable`对象,从而实现线程间的资源共享。
示例代码:
```java
class MyRunnable implements Runnable {
private String name;
public MyRunnable(String name) {
this.name = name;
}
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println("线程开始:" + this.name + ", i=" + i);
}
}
}
public class Main {
public static void main(String[] args) {
Thread t1 = new Thread(new MyRunnable("线程a"));
Thread t2 = new Thread(new MyRunnable("线程b"));
t1.start();
t2.start();
}
}
```
2. 继承Thread类
当你需要对线程进行定制,比如扩展线程的行为时,可以选择直接继承`Thread`类。在子类中重写`run()`方法,然后创建子类的实例并调用`start()`来启动线程。
示例代码(与给定内容类似):
```java
class MyThread extends Thread {
private String name;
public MyThread(String name) {
super();
this.name = name;
}
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println("线程开始:" + this.name + ", i=" + i);
}
}
}
public class Main {
public static void main(String[] args) {
MyThread mt1 = new MyThread("线程a");
MyThread mt2 = new MyThread("线程b");
mt1.start();
mt2.start();
}
}
```
启动线程的关键:start() vs run()
调用`start()`方法是启动线程的关键。当你直接调用`run()`方法时,代码会在当前线程(主线程)中顺序执行,而不是创建新的线程。而`start()`方法会启动一个新的线程,并在该线程中执行`run()`方法,从而实现并发执行。
在并发编程中,还需要关注以下知识点:
- 线程安全:当多个线程访问同一份数据时,需要确保数据的一致性和完整性,避免数据竞争和死锁等问题。
- 同步机制:包括`synchronized`关键字、`Lock`接口及其实现类,用于控制线程的并发访问,防止数据不一致。
- 线程通信:`wait()`, `notify()`, `notifyAll()`等方法用于线程间的通信,协调线程执行顺序。
- 线程池:`ExecutorService`和`ThreadPoolExecutor`允许你管理和控制线程,提高系统资源利用率,减少线程创建和销毁的开销。
- 并发工具类:如`Semaphore`信号量、`CyclicBarrier`回环栅栏、`CountDownLatch`计数器等,提供高级并发控制手段。
- Future和Callable:允许获取异步计算的结果,与`ExecutorService`配合使用。
理解并熟练掌握这些并发编程概念和工具,对于编写高效、可靠的多线程Java程序至关重要。
2018-02-24 上传
2022-06-21 上传
点击了解资源详情
点击了解资源详情
385 浏览量
2011-03-18 上传
2016-08-03 上传
2014-08-20 上传
stayalonea
- 粉丝: 16
- 资源: 2
最新资源
- 火炬连体网络在MNIST的2D嵌入实现示例
- Angular插件增强Application Insights JavaScript SDK功能
- 实时三维重建:InfiniTAM的ros驱动应用
- Spring与Mybatis整合的配置与实践
- Vozy前端技术测试深入体验与模板参考
- React应用实现语音转文字功能介绍
- PHPMailer-6.6.4: PHP邮件收发类库的详细介绍
- Felineboard:为猫主人设计的交互式仪表板
- PGRFileManager:功能强大的开源Ajax文件管理器
- Pytest-Html定制测试报告与源代码封装教程
- Angular开发与部署指南:从创建到测试
- BASIC-BINARY-IPC系统:进程间通信的非阻塞接口
- LTK3D: Common Lisp中的基础3D图形实现
- Timer-Counter-Lister:官方源代码及更新发布
- Galaxia REST API:面向地球问题的解决方案
- Node.js模块:随机动物实例教程与源码解析