创建线程的方式
来源:互联网 发布:mac 下 看 运行程序 编辑:程序博客网 时间:2024/06/01 09:52
一。继承Thread类创建子类
步骤:
1.定义Thread的子类,重写该类的run方法,run方法称为是执行体
2.创建Thread子类的实例,创建线程对象
3.调用线程对象的start()方法启动该线程
代码实现:
class MyThread extends Thread {@Overridepublic void run() {System.out.println("线程执行");}}public class A {public static void main(String[] args) {// TODO Auto-generated method stubnew MyThread().start();}}
也可以:
public class A {public static void main(String[] args) {// TODO Auto-generated method stubnew Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubSystem.out.println("线程开启");}}).start();}}
二。实现Runnable接口创建线程
1.定义Runnable接口的实现类,重写run方法,是线程的执行体
2.创建Runnable实现类的实例,用这个实例作为Thread的target来创建Thread对象,这个Thread对象是真正的线程对象
3.调用线程对象的start()方法启动线程
class MyThread implements Runnable{@Overridepublic void run(){System.out.println("线程执行");}}public class A {public static void main(String[] args) {// TODO Auto-generated method stub MyThread myThread =new MyThread(); Thread thread = new Thread(myThread); thread.start(); //或者// new Thread(new MyThread()).start();}}
三。使用Callable和Future创建线程
Callable接口提供一个call()方法作为线程执行体,call()方法比run()方法功能要强大,call()方法可以有返回值,call()方法可以声明抛出异常。
步骤:
1.创建Callable接口的实现类,实现call()方法,然后创建该实现类的实例
2.使用FutureTask类来包装Callable对象,该FutureTask对象封装Callable对象的call()方法的返回值
3.使用FutureTask对象作为Thread对象创建并启动线程
4.调用FutureTask对象的get()方法来获得子线程执行结束后的返回值
class MyThread implements Callable<String> {@Overridepublic String call() throws Exception {// TODO Auto-generated method stubint i = 0;String reString = "";for (; i < 10; i++) {reString = Thread.currentThread().getName() + " " + i;System.out.println(reString);}return reString;}}public class A {public static void main(String[] args) {// TODO Auto-generated method stubMyThread myThread = new MyThread();FutureTask<String> ft = new FutureTask<>(myThread);new Thread(ft, "子线程").start();}}
1、接口实现更灵活,还可以继承其他类,java不支持多继承。在这方面,Runnable和Callable更有优势。
2、返回值问题。Runnable和Thread都不能有返回值,但Callable可以,而且支持多种类型的数据。
3、继承Thread类的线程类不能再继承其他父类(Java单继承决定)。
4、使用callable和Future 和实现Runnable方式下,多个线程可以共享一个target对象,非常适合多线程处理同一份资源的情形。
阅读全文
0 0
- 创建线程的方式
- 创建线程的方式
- 创建线程的方式
- 创建线程的方式
- 线程的创建方式
- 线程的创建方式
- 线程的创建方式
- 创建线程的方式
- 线程的创建方式一
- 线程创建的两个方式
- 线程及其创建的方式
- 线程的创建方式问题
- Java线程的创建方式
- 创建传统线程的方式
- 自定义线程的创建方式
- 自定义线程的创建方式
- Java 创建线程的方式
- java创建线程的方式
- tensorflow中学习率的指数衰减函数
- centos7桌面版网卡有时候会起不来
- apk反编译
- 解决SSH免密登录配置成功后不生效问题
- Vue的elementUI实现自定义主题
- 创建线程的方式
- nginx上负载均衡简单配置
- 案例-多个小球碰撞
- [编程题] 赛马
- 用C++STL set解SDNU OJ 1099
- Go游戏服务器开发的一些思考(二十五):Redis的Docker Swarm部署
- Java 爬虫从入门到实战
- 解决CentOS 6.5 安装之没有网络的问题 【转自云栖社区】
- IE兼容性问题