Java Thread详解
前言
注意:本文所有内容都是基于JDK 1.8
随着计算机的不断发展,人们可以在计算机同时上播放音乐,玩游戏,和朋友聊天,这些功能其实都是由很多个线程参与工作实现的。而对于开发人员来说,线程的知识已经成为了必须要掌握的部分。
一、Thread 是什么
Thread 类是java.lang包下的一个类,我们创建的线程都是这个类的实例。内部常用方法如下:
通过下列代码可以观察到,创建线程的三种常规方式最终都是通过 new Thread() 创建的。
package com.curtis.demo.use;
import java.util.Arrays;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
/**
* @author Curtis
* @since 2024-04-18 20:51
*/
public class ThreadTestDemo {
public static void main(String[] args) {
System.out.println(Thread.currentThread().getName() + ": ThreadTestDemo is running");
MyCallable myCallable = new MyCallable();
FutureTask<String> futureTask = new FutureTask<>(myCallable);
new Thread(futureTask).start();
MyThread myThread = new MyThread();
myThread.start();
new Thread(new MyRunnable()).start();
try {
System.out.println(futureTask.get());
} catch (InterruptedException | ExecutionException e) {
System.out.println(Arrays.toString(e.getStackTrace()));
}
}
}
二、Thread 方法
1.Thread.start()和Thread.run()
执行 start() 方法会新启动一个线程去执行线程当中的 run() 方法。而直接执行 run() 方法实际是在当前线程上直接执行了run() 方法,并不会另起一个线程执行。
观察下列代码和输出结果:
package com.curtis.demo.use;
/**
* @author Curtis
* @since 2024-04-18 20:54
*/
public class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + ": MyRunnable.run");
}
}
package com.curtis.demo.use;
/**
* @author Curtis
* @since 2024-04-18 20:51
*/
public class ThreadTestDemo {
public static void main(String[] args) {
MyRunnable runnable = new MyRunnable();
Thread thread = new Thread(runnable);
// 设置线程名称
thread.setName("use start thread");
thread.start();
Thread thread1 = new Thread(runnable);
thread1.setName("use run thread");
thread1.run()