Java创建线程的三种方式,以前只知道两种,现在添加一种Callable与FutureTask创建的方式
一共有以下三种方式:
1.继承Thread
2.实现Runnable
3.实现Callable,并FutureTask包装
线程启动方式均是使用start()方法
先阐述优缺点:
1和2,3:
2,3优于1是使用了借口,留出来了继承的位置
1优于2,3是使用简单,实现简单
2和3:
我认为3的实现比2更复杂一些,因为2的方法效果单一
但正所谓一分耕耘一份收获,程序也是如此
3的call()方法比2的run()多出两点功能:抛异常和返回值,
而且3能通过
FutureTask类的包装对该线程监控,控制,启用取消该线程。
以下给出1,2线程的简要创建方式:
//继承Thread
class a extends Thread{
//其他什么都不做用就new,start
}
//实现Runnable
class A implements Runnable{
//重写run方法,一般在其内添加死循环
//启动方式为
//新建
// A a=new A();
//Thread t=new Thread(a);
//t.start()
}
重点介绍第三种创建方式,
以前学的不全,现在重新归纳
注意:也只能创建一个线程,并不是包装后通过FutureTask能建立多个线程,它的作用主要是用于监控被包装的线程的状态,以及控制该线程
本人踩坑(以为能多创建)
直接上代码:
package com.j;import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;import java.io.*;/*** @author joker* @version 1.0* @description pdf转word* @date 2020-03-01 -- 12:01*/
class Th implements Runnable {public boolean flag = true;public void run() {System.out.println("转换中");while (true) {if (!flag) {System.out.println();System.out.println("转换word成功!");return;}System.out.print(".#");try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}}}
}public class PDF {public static void main(String[] args) {try {Th th = new Th();new Thread(th).start();String pdfFile = "D:\\360安全浏览器下载\\多媒体教材.pdf";PDDocument doc = PDDocument.load(new File(pdfFile));int pagenumber = doc.getNumberOfPages();pagenumber=10;pdfFile = pdfFile.substring(0, pdfFile.lastIndexOf("."));String fileName = pdfFile + ".doc";File file = new File(fileName);if (!file.exists()) {file.createNewFile();}FileOutputStream fos = new FileOutputStream(fileName);Writer writer = new OutputStreamWriter(fos);PDFTextStripper stripper = new PDFTextStripper();stripper.setSortByPosition(true);// 排序stripper.setStartPage(5);// 设置转换的开始页stripper.setEndPage(pagenumber);// 设置转换的结束页stripper.writeText(doc, writer);//写到wordwriter.close();doc.close();th.flag=false;} catch (IOException e) {e.printStackTrace();}}}
学海无涯
java基础有待提高!
Java创建线程的三种方式,以前只知道两种,现在添加一种Callable与FutureTask创建的方式相关推荐
- java 创建线程_【80期】说出Java创建线程的三种方式及对比
点击上方"Java面试题精选",关注公众号 面试刷图,查缺补漏 >>号外:往期面试题,10篇为一个单位归置到本公众号菜单栏->面试题,有需要的欢迎翻阅. 一.Ja ...
- Java 创建线程的三种方式
一.继承Thread类创建 1.定义一个类继承Thread类,并重写Thread类的run()方法,run()方法的方法体就是线程要完成的任务,因此把run()称为线程的执行体: 2.创建该类的实例对 ...
- Java创建线程的三种方式
一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行体. (2)创建Thread子类的实 ...
- java 多线程编程(包括创建线程的三种方式、线程的生命周期、线程的调度策略、线程同步、线程通信、线程池、死锁等)
1 多线程的基础知识 1.1 单核CPU和多核CPU 单核CPU,其实是一种假的多线程,因为在一个时间单元内,也只能执行一个线程的任务.微观上这些程序是分时的交替运行,只不过是给人的感觉是同时运行,那 ...
- Java创建线程的三种方法
这里不会贴代码,只是将创建线程的三种方法做个笼统的介绍,再根据源码添加上自己的分析. 通过三种方法可以创建java线程: 1.继承Thread类. 2.实现Runnable接口. 3.实现Callab ...
- JAVA中创建线程的三种方法及比较
JAVA中创建线程的方式有三种,各有优缺点,具体如下: 目录 一.继承Thread类来创建线程 二.实现Runnable接口来创建线程 三.通过Callable和Future来创建线程 四.三种方式创 ...
- 创建线程的三种方式、线程运行原理、常见方法、线程状态
文章目录 1.创建线程的三种方式 1.1 继承Thread类并重写run方法 1.2 使用Runnable配合Thread 1.3 通过Callable和FutureTask创建线程 2.Runnab ...
- 创建线程的三种方式及区别
一:创建线程的三种方式: 1.继承Thread类 2.实现Runnable接口 3.使用Callable接口 二:创建线程的具体实现步骤: 1.继承Thread类 (1).先继承 Thread类,并且 ...
- Java 创建线程的三种方法比较
在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,本文主要讲述Java 创建线程的三种方法比较, 更多Java专业知识,广州疯狂jav ...
最新文章
- 我是架构师-设计模式-工厂模式-工厂方法
- 蓝桥杯java 算法提高 摆花
- redis的基本使用笔记二
- cron4j的Jfinal plugin
- linux 查看cuda版本_Ubuntu18.04+Tensorflow GPU版本环境搭建
- 【披着递推皮的动态规划】 山区建小学 题解
- Vagrant 手册之 Provisioning - file 配置程序
- php生成excel带图片格式,php导出excel单元格带图片显示方法
- postman下载安装汉化及使用
- 关于医学影像中的轴位面(横断面)、冠状面、矢状面
- 注意JDBC数据库连接中资源关闭的顺序
- MySQL数据字典提示1146不存在的问题解决
- Java工程师进阶知识完全扫盲, 太全了!!
- ChunJun Meetup演讲分享 | 基于袋鼠云开源框架的数仓一体化建设探索
- 想要画漫画?掌握风格很关键!
- 多个中通快运的物流情况是怎么批量查询并保存到电脑的
- win10正确清理C盘
- webstorm html代码提示设置,Webstorm设置代码提示
- Intellij IDEA神器那些让人爱不释手的小技巧
- MapReduce学习之概述和设计构思
热门文章
- 0003 无重复字符的最长子串
- React+dva+antd的运用
- 20169214 2016-2017-2 《网络攻防实践》实验二学习总结
- PRISM概率模型检测器初使用--骰子模型(改进版)
- ASP.NET MVC3 Razor视图引擎-基础语法
- 一步一步学Silverlight 2系列(22):在Silverlight中如何用JavaScript调用.NET代码
- Nslookup-查dns
- [论文阅读] (04) 人工智能真的安全吗?浙大团队外滩大会分享AI对抗样本技术
- 【数据结构与算法】之深入解析“石子游戏VIII”的求解思路与算法示例
- HarmonyOS之深入解析通知的使用