java线程与并行(主要讲解java的nio包某些内容)
### Java线程与并行详解 #### 一、Java线程基础 在Java中,**线程**是一种轻量级的进程,它允许一个程序同时执行多个任务,从而提高程序的执行效率。Java从1.0版本开始就支持多线程编程,并在后续版本中不断完善。Java线程可以通过继承`java.lang.Thread`类或实现`Runnable`接口来创建。 ##### 创建线程 1. **继承Thread类** - 创建`Thread`类的子类并重写`run()`方法。 - 实例化子类对象,并调用`start()`方法启动线程。 ```java class MyThread extends Thread { public void run() { // 线程执行的代码 } } MyThread myThread = new MyThread(); myThread.start(); ``` 2. **实现Runnable接口** - 定义实现了`Runnable`接口的类,并实现`run()`方法。 - 创建`Runnable`对象,并将其传递给`Thread`构造函数。 - 调用`start()`方法启动线程。 ```java class MyRunnable implements Runnable { public void run() { // 线程执行的代码 } } Thread thread = new Thread(new MyRunnable()); thread.start(); ``` #### 二、线程生命周期 线程在其生命周期中可能会经历以下几种状态: 1. **NEW**: 线程被创建但还未启动。 2. **RUNNABLE**: 线程正在运行或准备好运行。 3. **BLOCKED**: 线程因等待锁定而阻塞。 4. **WAITING**: 线程因调用`Object.wait()`或`Thread.join()`而等待。 5. **TIMED_WAITING**: 线程因调用`Thread.sleep()`或带超时参数的`Object.wait()`或`Thread.join()`而等待。 6. **TERMINATED**: 线程已终止。 这些状态由`Thread.State`枚举表示,可以通过`getState()`方法获取当前线程的状态。 #### 三、线程控制 ##### 控制线程执行 1. **设置优先级** - 使用`setPriority()`方法设置线程的优先级。 - 线程优先级范围是1到10,默认为5。 ```java Thread t = new Thread(); t.setPriority(Thread.MAX_PRIORITY); // 设置最高优先级 t.setPriority(Thread.MIN_PRIORITY); // 设置最低优先级 ``` 2. **让出CPU** - 使用`Thread.yield()`可以让出CPU,使同优先级的线程有机会运行。 ```java for (int i = 0; i < data.length; i++) { process(data[i]); if ((i % 10) == 0) { Thread.yield(); // 让出CPU } } ``` 3. **处理异常** - 如果线程因异常而终止,可以通过`Thread.UncaughtExceptionHandler`接口捕获并处理这些异常。 ```java Thread t = new Thread(new Runnable() { public void run() { try { // 可能抛出异常的代码 } catch (Exception e) { // 异常处理代码 } } }); t.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { public void uncaughtException(Thread t, Throwable e) { // 处理未捕获的异常 } }); t.start(); ``` #### 四、示例代码分析 假设有一个需要排序的长列表`list`,可以在后台进行排序操作而不阻塞主线程。下面展示两种方式创建这样的线程。 1. **继承Thread类** ```java final List list; // 已在其他地方初始化 class BackgroundSorter extends Thread { List l; public BackgroundSorter(List l) { this.l = l; } public void run() { Collections.sort(l); } } Thread sorter = new BackgroundSorter(list); sorter.start(); ``` 2. **实现Runnable接口** ```java Thread t = new Thread(new Runnable() { public void run() { Collections.sort(list); } }); t.start(); ``` #### 五、小结 本文详细介绍了Java中线程的基本概念、创建方式、生命周期以及如何控制线程执行等知识点。通过实际示例代码展示了如何创建和使用线程,帮助读者更好地理解和应用Java线程技术。在实际开发中,合理利用线程能够显著提升程序性能和用户体验。
- wenwawa882012-10-22java nio是mina的基础,学习nio对mina有很好的帮助,确实不错的,淘宝,电信的都是用了这个技术
- 猫猫喵喵2013-12-01十分有参考价值的代码
- JimmyLincole2013-11-21nio包确实是个好东西,而学习又容易忽略的包
- 粉丝: 1657
- 资源: 34
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于javaweb的在线购物平台_gd77w3d8.zip
- 基于B_S架构社区快递上门服务系统设计与实现_xwnzwl3f.zip
- 基于xilinx k7 325t实现的千兆网udp协议,只需要设置好IP,端口,就可以直接给数据,基本等同于透传,可以不用管底层协议 可以 # FPGA 实现udp模块说明 ## udp-proto
- 聊天系统(java+applet).rar
- 图书管理系统(java+mssql).rar
- 图片浏览小程序(java+applet).rar
- 文本编辑器.rar
- 马楼
- 网上购物系统(JavaBean+Servlet+jsp).rar
- 阳光酒店管理系统(javaapplet+SQL).rar
- 数字化医疗基石:SSM 框架下 JSP 实现的电子病历管理系统
- 基于SpringBoot+Vue的志愿者招募管理系统_h24dhqnp.zip
- 【南华期货-2024研报】南华商品指数:有色板块领涨,农产品板块下跌.pdf
- 【国投期货-2024研报】国投期货贵金属周度期货价量总览.pdf
- 【东海期货-2024研报】宏观数据观察:稳中求进、以进促稳,守正创新、先立后破.pdf
- 基于 SSM 的 Java Web 商铺租赁管理系统设计 -JSP 技术点亮租赁服务