Java并发编程:实现Runnable与Thread类
需积分: 9 165 浏览量
更新于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 上传
点击了解资源详情
点击了解资源详情
2011-03-18 上传
385 浏览量
2016-08-03 上传
2014-08-20 上传
stayalonea
- 粉丝: 16
- 资源: 2
最新资源
- 黑板风格计算机毕业答辩PPT模板下载
- CodeSandbox实现ListView快速创建指南
- Node.js脚本实现WXR文件到Postgres数据库帖子导入
- 清新简约创意三角毕业论文答辩PPT模板
- DISCORD-JS-CRUD:提升 Discord 机器人开发体验
- Node.js v4.3.2版本Linux ARM64平台运行时环境发布
- SQLight:C++11编写的轻量级MySQL客户端
- 计算机专业毕业论文答辩PPT模板
- Wireshark网络抓包工具的使用与数据包解析
- Wild Match Map: JavaScript中实现通配符映射与事件绑定
- 毕业答辩利器:蝶恋花毕业设计PPT模板
- Node.js深度解析:高性能Web服务器与实时应用构建
- 掌握深度图技术:游戏开发中的绚丽应用案例
- Dart语言的HTTP扩展包功能详解
- MoonMaker: 投资组合加固神器,助力$GME投资者登月
- 计算机毕业设计答辩PPT模板下载