-
- 继承Thread方式拷贝文件
-
- 实现Runnable方式输出文件夹中所有的Java文件
-
- 实现Callable方式统计视频文件的个数,并且输出这个线程执行的结果
-
- 使用匿名内部类的方式输出1~100
-
- 使用Lambda表达式的方式计算1~100的和
1. 继承Thread方式拷贝文件
// 1. 继承Thread方式拷贝文件
public class Demo01 {
public static void main(String[] args) {
CopyFile cf = new CopyFile("D:\\Demo\\456.txt", "D:\\Demo01\\123.txt");
cf.start();
}
}
class CopyFile extends Thread{
private String srcFile;
private String dercFile;
public CopyFile(String srcFile, String dercFile) {
this.srcFile = srcFile;
this.dercFile = dercFile;
}
@Override
public void run() {
copyFile();
}
public void copyFile(){
try(InputStream is = new FileInputStream(srcFile); OutputStream os = new FileOutputStream(dercFile)) {
byte[] bytes = new byte[1024];
int len = 0;
while ((len = is.read(bytes)) != -1) {
os.write(bytes,0,len);
os.flush();
}
} catch (Exception e) {
e.printStackTrace();
} ;
}
}
2. 实现Runnable方式输出文件夹中所有的Java文件
//*2. 实现Runnable方式输出文件夹中所有的Java文件**
public class Demo02 {
public static void main(String[] args) {
OpenFile of = new OpenFile(new File("D:\\Java\\project-idea"));
Thread t = new Thread(of);
t.start();
}
}
class OpenFile implements Runnable{
private File srcFolder;
@Override
public void run() {
getAllJavaFile(srcFolder);
}
public OpenFile(File srcFolder) {
this.srcFolder = srcFolder;
}
public void getAllJavaFile(File srcFolder){
if (Objects.isNull(srcFolder)) {
throw new NullPointerException("不能为空!");
}
File[] files = srcFolder.listFiles();
if (files == null || files.length <= 0) {
return;
}
for (File file : files) {
if (file.isDirectory()) {
getAllJavaFile(file);
}else {
String fileName = file.getName();
if (fileName.endsWith(".java")) {
System.out.println(fileName);
}
}
}
}
}
3. 实现Callable方式统计视频文件的个数,并且输出这个线程执行的结果
//3. 实现Callable方式统计视频文件的个数,并且输出这个线程执行的结果
public class Demo03 {
public static void main(String[] args) throws ExecutionException, InterruptedException {
FutureTask<Integer> task = new FutureTask<Integer>(new GetVideoFileNumber(new File("D:\\Java\\video")));
Thread t = new Thread(task);
t.start();
Integer videoNum= task.get();
System.out.println(videoNum);
}
}
class GetVideoFileNumber implements Callable<Integer> {
private File videoFile;
public GetVideoFileNumber(File videoFile) {
this.videoFile = videoFile;
}
@Override
public Integer call() throws Exception {
return getVideoFile(videoFile);
}
public Integer getVideoFile(File videoFile) {
Integer totalCount = 0;
if (Objects.isNull(videoFile)) {
return 0;
}
File[] files = videoFile.listFiles();
if (Objects.isNull(files) || files.length <= 0) {
return 0;
}
for (File file : files) {
if (file.isDirectory()) {
totalCount += getVideoFile(file);
} else {
if (file.getName().endsWith(".mp4")) {
totalCount++;
}
}
}
return totalCount;
}
}
4. 使用匿名内部类的方式输出1~100
public class Demo04 {
public static void main(String[] args) throws ExecutionException, InterruptedException {
new Thread().start();
new Thread(){
@Override
public void run() {
for(int i = 1; i <= 100; i++){
System.out.println(i);
}
}
}.start();
}
}
5. 使用Lambda表达式的方式计算1~100的和
public class Demo05 {
public static void main(String[] args) throws ExecutionException, InterruptedException {
new Thread(()->{ int sum = 0;
for (int i = 1;i<= 100;i++){
sum += i;
}
System.out.println(sum);
}).start();
}
}
本文详细介绍了Java中启动线程的五种方法,包括继承Thread类拷贝文件、实现Runnable接口输出Java文件、实现Callable接口统计视频文件数量并返回结果、使用匿名内部类输出数字以及利用Lambda表达式计算数字和。

被折叠的 条评论
为什么被折叠?



