Java 多线程(一) 线程的创建
来源:互联网 发布:javascript脚本语言 编辑:程序博客网 时间:2024/04/20 16:45
现代操作系统中,进程是资源分配的基本单位,而线程是调度的基本单位。一个进程内可以有多个线程,而这些线程可以共享进程的资源,比如内存资源,IO资源。 大家开发常用的Eclipse启动后就是一个进程,而使用它的不同功能会启动对应不同的线程,如代码编辑版块是一个线程在处理,视图(按钮,鼠标点击等)响应是另一个线程在处理。多线程提升了处理器的使用效率,因为在一个线程空闲时,处理器可以调用其他线程,宏观上来看,一个时间段内,有多个任务同时在执行,称为并发。
想象我们是一个武侠世界中的男主角,要完成的任务的有练功,研读武功秘籍,吃饭。武功秘籍厚厚一本,如果只能单任务顺序处理,读完秘籍再练功,再吃饭,也许就饿死了。在多任务并发执行的情况下,我们为每个人物启动一个线程,可以看一会秘籍,然后练功,饿了就吃饭,吃了饭之后再继续看书,练功。在读完秘籍的过程中,穿插了练功和吃饭。
JDK提供了对多线程的支持,本文介绍JAVA中线程如何创建。
1.通过继承Thread类创建线程
我们建立一个练功的线程。
public class Practise extends Thread{public Practise(String name) {super(name);}//线程执行时调用此方法@Overridepublic void run() { System.out.println("Thread:"+Thread.currentThread().getName()+" is running");}public static void main(String[] args) {//新建MyThread实例,传入给线程起的名字 Practise practise = new Practise("Practise"); practise.start();//启动线程} }
Thread类时JDK提供的实现线程相关操作的类,我们要创建自己的线程类Hero,只需要继承Thread类,然后实现run方法,最后调用Hero实例的start方法,即启动了线程。线程想要做的事,编写在run方法里,线程在启动后,会自己执行run方法。上述代码的run方法输出正在调用该方法的线程名称。我们新建Hero实例时,传入了一个String,这是在定义该线程的名称,在run方法中,我们通过
Thread.currentThread().getName()就可以输出定义的线程名称。
上述代码执行结果为
Thread:Practise is running
public class Practise extends Thread{public Practise(String name) {super(name);}//线程执行时调用此方法@Overridepublic void run() { System.out.println("Thread:"+Thread.currentThread().getName()+" is running");}public static void main(String[] args) {//新建MyThread实例,传入给线程起的名字Practise practise = new Practise("Practise");//practise.start();//启动线程practise.run();}}输出:Thread:main is running
我们换成直接在main方法里执行practise.run().输出结果:Thread:main is running. 线程名跟之前的不一样了,说明调用run方法的线程变成了main线程,而不是practise线程。main线程是调用main方法的线程。
2.通过实现runnable接口创建线程
上述介绍的通过继承Thread类来创建线程,有一定的局限性,因为Java不支持多继承,所以如果一个类已经继承过其他类,则无法通过继承Thread类来创建线程。Java提供了Runnable接口,通过实现该接口,也可以创建线程。
public class Practise implements Runnable{@Overridepublic void run() {System.out.println("Thread:"+Thread.currentThread().getName()+" is running");}public static void main(String[] args) {// TODO Auto-generated method stubPractise practise = new Practise(); Thread t = new Thread(practise,"Practise");t.start();}}输出结果:Thread:Practise is running
如上述代码所示,输出结果与继承Thread类的结果相同。我们需要先实例化实现了Runnable接口的类,然后将其作为参数传给一个Thread的实例对象,最后通过Thread实例对象的start方法来启动线程。
- Java 多线程(一) 线程的创建
- Java 多线程(一) 线程的创建
- Java多线程一:创建线程
- java多线程(一)线程状态与创建线程
- Java多线程总结(一):多线程简介及线程的创建
- Java多线程编程(一):创建并运行Java线程
- 多线程学习(一)线程概念&线程的创建
- 【多线程】Java线程的创建
- java多线程-线程的创建
- Java多线程总结(一):Java两种创建线程方式的比较
- Java中的多线程(一)之多线程创建
- java 多线程 (一)线程的实现
- (一)线程的创建和启动--java 多线程编程的那点小事
- JAVA多线程编程(一)——线程的创建方式
- 黑马程序员-Java 多线程(一)-线程的创建、状态、安全性
- java多线程学习(一)之创建线程的两种方式
- Java多线程(一)——线程创建的两种方法
- Java多线程的创建(方法一)
- C++primer知识点(一)
- 《快学Scala》第四章习题解答
- QT-悬浮对话框
- iOS简单对象的文件存取
- BAT 批处理获取系统时间
- Java 多线程(一) 线程的创建
- Unity mesh texture开启 read 会增加内存畅想
- 简单的表达式计算
- 快速统计正二进制数中一个个数
- 第二章习题
- SSH项目中HQL语句不支持中文参数
- php发送错误日志邮件
- iOS UITextView
- Bestcoder83 1001