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);//写到word
            writer.close();
            doc.close();

            th.flag=false;
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


}

学海无涯

java基础有待提高!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值