Java 并发编程(三)线程管理
来源:互联网 发布:淘宝30天最低价 编辑:程序博客网 时间:2024/06/11 09:01
线程管理
根据 Java 并发编程(二)线程状态跃迁可知线程包含了如下几种状态:
1.新建状态(New)
2.就绪状态(Runnable)
3.运行状态(Running)
4.阻塞状态(Blocked)
5.死亡状态(Dead)
Java中自带了对多线程技术的支持,实现多线程编程方式有两种,一种是继承Thread类,另一种是实现Runnbale接口。
1 继承Thread类
在学习创建线程前,先看看Thread类的结构,如下:
public class Thread implements Runnable {}
Thread类实现了Runnable接口,它们之间存在多态关系。使用继承Thread类创建线程局限就是不能多继承,这是因为Java语言特点就是单继承。所以为了实现多继承,可以实现Runnable接口的方式创建线程。两种方式(一边实现一边继承)创建的线程工作性质是一致的,没有本质区别。
创建自定义线程类如下:
public class MyThread extends Thread{ @Override public void run() { try { // 阻塞状态(Blocked),当然还有其他方式可以让线程阻塞,例如wait()方法。 TimeUnit.SECONDS.sleep(4); System.out.println("MyThread"); } catch (Exception e) { e.printStackTrace(); } }}
调试代码如下:
public class Run { public static void main(String[] args) { // 新建状态(New) MyThread thread = new MyThread(); // 就绪状态(Runnable),由CPU调度是状态转为:运行状态(Running) thread.start(); System.out.println("Main线程运行结束"); }}
执行结果:
Main线程运行结束MyThread // 死亡状态(Dead),已退出run()方法
从结果上看,MyThread类中的run方法执行比较晚,也说明在多线程中,各线程之间执行顺序与调用顺序无关。同样,线程其实是一个子任务,CPU的任务调度是不确定的方式或者说是随机来调用线程并执行run方法,所以就会出现此结果。
2 实现Runnable接口
Java不支持多继承,如果要创建的线程已经继承某各类,那就不能在继承Thread类创建线程类了,所以此时只能实现Runnable接口来创建线程类。
创建自定义线程类:
public class MyRunnable implements Runnable { @Override public void run() { System.out.println("MyRunnable"); }}
调试代码:
public class Run { public static void main(String[] args) { MyRunnable myRunnable = new MyRunnable(); Thread thread = new Thread(myRunnable); thread.start(); System.out.println("Main线程运行结束"); }}
调试结果:
Main线程运行结束MyRunnable
3 小结
Java中创建线程类还是比较简单的,但是多线程之间的同步确实比较难理解以及如何实现同步可参考如下文章:Java 并发编程(四)线程同步关键字volatile和synchronized
阅读全文
0 0
- Java 并发编程(三)线程管理
- Java并发编程之线程管理(线程创建1)
- java并发编程(三)-守护线程、线程工厂
- Java并发编程之线程管理(Executor框架11)
- Java并发编程之线程管理(Executor框架12)
- Java并发编程之线程管理(Executor框架13)
- Java并发编程之线程管理(Executor框架14)
- Java并发编程之线程管理(Executor框架15)
- Java并发编程之线程管理(Executor框架16)
- java并发编程之线程管理
- Java 并发编程之线程池的使用 (三)
- Java 并发编程之线程池的使用 (三)
- Java并发编程类学习三(线程的执行)
- Java并发编程实战学习笔记(三)-线程封闭
- JAVA并发编程(三)设计线程安全的类
- java并发编程(三)----线程的同步
- Java并发编程学习(三)——线程通信
- (三) java并发编程--线程的安全性
- C#中的 具名参数 和 可选参数
- ORA-00911: invalid character
- 获取war包中配置文件路径API
- TypeError: super(type, obj): obj must be an instance or subtype of type
- 字符串查找(文件路径查找)
- Java 并发编程(三)线程管理
- java中的注解大全@controller、@service、@repository等
- C++11学习之匿名函数lambda表达式
- Centos技术(4)---mysql导入*.sql文件
- Easyui datagrid加载本地Json数据
- jQuery:基础学习(5)工具,事件对象,延迟对象,回调,正则
- JS原生脱敏
- 论2017-2018的投资
- 在IDEA中创建Java 9 modules(模块)的Hello World