多线程是指一个程序中有多个执行路径(线程),每个线程并发运行,彼此独立,执行不同的任务。一个线程是程序中的基本执行单位。
class MyThread extends Thread {
@Override
public void run() {
System.out.println("线程正在执行...");
}
}
public class Main {
public static void main(String[] args) {
MyThread thread = new MyThread();
thread.start(); // 启动线程
}
}
class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("线程正在执行...");
}
}
public class Main {
public static void main(String[] args) {
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start();
}
}
Thread t = new Thread(() -> System.out.println("子线程执行"));
t.start(); // 启动线程
作用:启动线程,通知 JVM 创建新的线程,执行 run() 方法 。注意,只能调用一次,否则会抛出异常IllegalThreadsStateException。
run()
作用:线程执行体,定义线程要执行的代码。
start()和run()区别:start()是启动一个新线程执行run()方法,run()是作为普通方法调用,在当前线程执行。
作用:让当前线程进入“休眠”状态,暂停一段时间后自动恢复运行,单位是毫秒。
Thread.sleep(1000); // 当前线程睡眠 1 秒
作用:等待目标线程执行完毕后,当前线程再继续执行。
Thread t = new Thread(() -> System.out.println("子线程执行完毕"));//lambda表达式
t.start();
t.join(); // 等 t 执行完毕
System.out.println("主线程继续执行");
作用:暂停当前线程,让同优先级的其他线程有机会执行。
Thread.yield();
作用:中断线程(不是强制停止,而是设置中断标志)。
使用lambda表达式:
Thread t = new Thread(() -> {});
替换
Runnable r = new Runnable() {
@Override
public void run() {
// 线程运行的内容
}
};
Thread t = new Thread(r);
Thread t = new Thread(() -> {
while (!Thread.currentThread().isInterrupted()) {
System.out.println("线程运行中...");
}
System.out.println("线程被中断");
});
t.start();
Thread.sleep(100); // 主线程睡 100ms
t.interrupt(); // 中断 t 线程
作用:判断线程是否处于活动状态(即线程已经启动且尚未终止)。
Thread t = new Thread(() -> {});
System.out.println(t.isAlive()); // false
t.start();
System.out.println(t.isAlive()); // true
作用:设置优先级(范围1-10,5为默认)
Thread t = new Thread(() -> {});
t.setPriority(Thread.MAX_PRIORITY); // 设置为最高优先级
作用:获取当前线程优先级
System.out.println(Thread.currentThread().getPriority());
作用:设置线程为守护线程(主线程结束后,守护线程自动结束),必须在start()前使用。
Thread t = new Thread(() -> {
while (true) {
System.out.println("守护线程运行中...");
}
});
t.setDaemon(true);
t.start();
Thread.sleep(1000);
System.out.println("主线程结束");
作用:获取当前正在执行的线程对象。
Thread t = Thread.currentThread();
System.out.println("当前线程: " + t.getName());
作用:获取/设置线程名称。
Thread t = new Thread(() -> {});
t.setName("工作线程");
System.out.println(t.getName());
作用:获取线程唯一标识符
Thread t = new Thread(() -> {});
System.out.println(t.getId());
方法 | 作用 | 场景 |
---|---|---|
start() |
启动线程 | 启动新线程运行任务 |
run() |
线程执行体 | 定义线程要执行的代码 |
sleep(ms) |
休眠线程 | 定时任务、节省 CPU |
join() |
等待另一个线程执行完毕 | 线程串行执行 |
yield() |
让出 CPU 让其他同优先级线程执行 | 减少 CPU 占用 |
interrupt() |
请求中断线程 | 线程间通信,优雅停止线程 |
isAlive() |
判断线程是否存活 | 检查线程状态 |
setPriority() |
设置线程优先级 | 提升关键任务线程调度机会 |
setDaemon(true) |
设置为守护线程 | 后台服务,如 JVM GC 线程 |
currentThread() |
获取当前线程对象 | 调试、多线程环境下判断当前线程 |
以上就是对Java线程知识的学习,如有错误,欢迎指正!