线程创建和启动:继承Thread类和实现Runnable接口
来源:互联网 发布:大数据彩票预测王律强 编辑:程序博客网 时间:2024/06/04 00:58
1、继承Thread类创建线程类
通过继承Thread类来创建并启动多线程:
- 定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体就是线程需要完成的任务,称为线程执行体。
- 创建Thread子类的实例,即创建了线程对象。
- 调用线程对象的start()方法来启动该线程。
package com.xtli.controller.CSDN.createThread;import java.io.IOException;/* * 创建线程的方式 *///方式1:继承Thread类public class CreateThreadMain { public static void main(String[] args) throws IOException { //启动第一个线程 CreateThread my1 = new CreateThread(); my1.start(); //启动第二个线程 CreateThread my2 = new CreateThread(); my2.start(); }}class CreateThread extends Thread { public void run() { System.out.println(this.getName()+"线程启动啦");//Thread中实现了getName()方法,可以直接使用 }}执行结果
Thread-0线程启动啦Thread-1线程启动啦
启动线程使用start()方法,而不是调用run()方法。直接调用run()方法,则run()方法会立即被执行,在返回结果之前,其他线程无法并发执行,即系统会把线程对象当做一个普通对象,而run()方法也是一个普通方法,而不是线程执行体。
2、实现Runnable接口
实现Runnable接口来创建并启动多线程:
- 定义Runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体。
- 创建Runnable实现类的实例,并以此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。
- Thread对象调用start()方法启动该线程
package com.xtli.controller.CSDN.createThread;import java.io.IOException;/* * 创建线程的方式 *///方式2:实现Runnable接口public class CreateThreadSecondMain { //不共享target实例 public static void main(String[] args) throws IOException { //启动第一个线程 CreateThreadSecond my1 = new CreateThreadSecond(); //my1为target new Thread(my1).start(); //启动第二个线程 CreateThreadSecond my2 = new CreateThreadSecond(); //my2为target new Thread(my2).start(); }}class CreateThreadSecond implements Runnable { private int i; @Override public void run() { // TODO Auto-generated method stub // System.out.println(this.getName()+"线程启动啦"); //不能使用this.getName()来获取当前线程名称,因为接口中只能有抽象方法和常量,不能提供getName()方法的实现 System.out.println(i++); System.out.println(Thread.currentThread().getName()+"线程启动啦"); }}执行结果
00Thread-0线程启动啦Thread-1线程启动啦
两种方式中,采用Runnable接口的方式创建的多线程可以共享线程类的实例变量(上面的例子并没有共享同一个target)。因为在这种方式下,程序所创建的Runnable对象只是线程的target,而多个线程可以共享同一个target,所以多个线程可以共享同一个target类的实例变量。
实现Runnable接口时,共享同一个target,代码如下
package com.xtli.controller.CSDN.createThread;import java.io.IOException;/* * 创建线程的方式 *///方式2:实现Runnable接口public class CreateThreadSecondMain {/* //不共享target实例 public static void main(String[] args) throws IOException { //启动第一个线程 CreateThreadSecond my1 = new CreateThreadSecond(); new Thread(my1).start();//my1为target //启动第二个线程 CreateThreadSecond my2 = new CreateThreadSecond(); new Thread(my2).start();//my2为target }*/ //共享target实例 public static void main(String[] args) throws IOException { //启动第一个线程 CreateThreadSecond my1 = new CreateThreadSecond(); new Thread(my1).start();//my1为target //启动第二个线程 new Thread(my1).start();//共享my1 }}class CreateThreadSecond implements Runnable { private int i; @Override public void run() { // TODO Auto-generated method stub // System.out.println(this.getName()+"线程启动啦"); //不能使用this.getName()来获取当前线程名称,因为接口中只能有抽象方法和常量,不能提供getName()方法的实现 System.out.println(i++); System.out.println(Thread.currentThread().getName()+"线程启动啦"); }}执行结果
01Thread-0线程启动啦Thread-1线程启动啦
阅读全文
0 0
- 线程创建和启动:继承Thread类和实现Runnable接口
- 创建线程继承Thread和实现Runnable接口
- 线程 创建和启动线程的两种方式 实现Runnable接口 继承Thread类 重写唯一方法run()
- Java线程示例 - 继承Thread类和实现Runnable接口
- 线程的创建:实现Runnable接口和继承Thread类,(倒计时的实现)
- java多线程学习1-继承Thread类和实现Runnable接口来创建线程
- 通过继承Thread类和通过实现Runnable接口 创建线程的区别
- 细说继承Thread类和实现Runnable接口来创建线程的区别
- Java【多线程知识总结(5)】比较继承Thread类创建线程和实现Runnable接口创建线程这两种方式
- 源码分析继承Thread和实现Runnable来创建线程
- JAVA 线程的两种基本实现方法(继承Thread类和实现Runnable接口)
- 线程实现方式-继承Thread类和实现Runnable接口的区别
- 7.4Java创建线程(Runnable接口和Thread类)
- Java创建线程(Runnable接口和Thread类)
- Java创建线程(Runnable接口和Thread类)
- 继承Thread类和实现Runnable接口的区别。
- 继承Thread父类和实现Runnable接口的区别
- 继承Thread类和实现Runnable接口的对比
- MySQL5.7改密码
- windows下配置hadoop开发环境
- python基础之三——函数
- Cocos2d-X游戏开发(五)
- LibXL库使用详解(篇一)
- 线程创建和启动:继承Thread类和实现Runnable接口
- Makefile的四种常用基本模板
- 为什么java线程不推荐调用stop,suspend,resume方法
- 自定义RxBus,RxManager with RxJava2
- Python面向对象编程
- Android 自定义View实现SegmentControlView
- Effective C++ <一> :让自己习惯于C++
- Dubbo架构与底层实现
- yii2 文件上传