Java创建线程的三种方式,以前只知道两种,现在添加一种Callable与FutureTask创建的方式
一共有以下三種方式:
1.繼承Thread
2.實(shí)現(xiàn)Runnable
3.實(shí)現(xiàn)Callable,并FutureTask包裝
線程啟動(dòng)方式均是使用start()方法
先闡述優(yōu)缺點(diǎn):
1和2,3:
2,3優(yōu)于1是使用了借口,留出來(lái)了繼承的位置
1優(yōu)于2,3是使用簡(jiǎn)單,實(shí)現(xiàn)簡(jiǎn)單
2和3:
我認(rèn)為3的實(shí)現(xiàn)比2更復(fù)雜一些,因?yàn)?的方法效果單一
但正所謂一分耕耘一份收獲,程序也是如此
3的call()方法比2的run()多出兩點(diǎn)功能:拋異常和返回值,
而且3能通過(guò)
FutureTask類的包裝對(duì)該線程監(jiān)控,控制,啟用取消該線程。
以下給出1,2線程的簡(jiǎn)要?jiǎng)?chuàng)建方式:
//繼承Thread class a extends Thread{ //其他什么都不做用就new,start } //實(shí)現(xiàn)Runnable class A implements Runnable{ //重寫(xiě)run方法,一般在其內(nèi)添加死循環(huán) //啟動(dòng)方式為 //新建 // A a=new A(); //Thread t=new Thread(a); //t.start() }重點(diǎn)介紹第三種創(chuàng)建方式,
以前學(xué)的不全,現(xiàn)在重新歸納
注意:也只能創(chuàng)建一個(gè)線程,并不是包裝后通過(guò)FutureTask能建立多個(gè)線程,它的作用主要是用于監(jiān)控被包裝的線程的狀態(tài),以及控制該線程
本人踩坑(以為能多創(chuàng)建)
直接上代碼:
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轉(zhuǎn)word* @date 2020-03-01 -- 12:01*/ class Th implements Runnable {public boolean flag = true;public void run() {System.out.println("轉(zhuǎn)換中");while (true) {if (!flag) {System.out.println();System.out.println("轉(zhuǎn)換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);// 設(shè)置轉(zhuǎn)換的開(kāi)始頁(yè)stripper.setEndPage(pagenumber);// 設(shè)置轉(zhuǎn)換的結(jié)束頁(yè)stripper.writeText(doc, writer);//寫(xiě)到wordwriter.close();doc.close();th.flag=false;} catch (IOException e) {e.printStackTrace();}}}學(xué)海無(wú)涯
java基礎(chǔ)有待提高!
與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的Java创建线程的三种方式,以前只知道两种,现在添加一种Callable与FutureTask创建的方式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: idea单行注释对齐修改Settings
- 下一篇: 利用Java的BigDecimal与马青