Java并发编程:实现Runnable与Thread类
需积分: 9 191 浏览量
更新于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
最新资源
- 53款高大上的网页PPT商业图片素材.zip
- noticia
- Object-C-MixinObject-C-MixinObject-C-Mixin
- 图片
- muebles:个人实践框架和实践
- TrixCMS-install:在Linux上自动安装TrixCMS
- Lab4_PrograWeb_ExpressJS:Laboratorio 4 con Express JS
- pyannote-audio:说话人分类的神经构建块
- key-value-memory-networks:直接阅读文档的键值存储网络,亚历山大·米勒,亚当·费施,杰西·道奇,阿米尔·侯赛因·卡里米,安托万·鲍德斯,杰森·韦斯顿https
- spree_asset_variant_options:Spree Commerce Extension为管理员提供了将单个图像分配给多个变体的功能
- redriceOS:Redrice Research操作系统(希望在将来的某个时候)
- 毕业设计&课设-对流扩散方程的数值模拟.zip
- bloomfilter:简单的bloom过滤器实现
- vscode-firefox-debug:Firefox的VS Code调试适配器
- soon::SOON_arrow: 即将推出 Jekyll 页面模板
- Consertos de Celulares-crx插件