Java多线程

多线程是指一个程序中有多个执行路径(线程),每个线程并发运行,彼此独立,执行不同的任务。一个线程是程序中的基本执行单位。

创建和启动线程

1. 通过继承 Thread 类 

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();  // 启动线程
    }
}

2.通过实现 Runnable 接口 

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常用接口

1.线程启动:
start()

Thread t = new Thread(() -> System.out.println("子线程执行"));
t.start(); // 启动线程

作用:启动线程,通知 JVM 创建新的线程,执行 run() 方法 。注意,只能调用一次,否则会抛出异常IllegalThreadsStateException。

run()

作用:线程执行体,定义线程要执行的代码。

start()和run()区别:start()是启动一个新线程执行run()方法,run()是作为普通方法调用,在当前线程执行。

2.线程控制:

sleep(long millis)

作用:让当前线程进入“休眠”状态,暂停一段时间后自动恢复运行,单位是毫秒。

Thread.sleep(1000); // 当前线程睡眠 1 秒

join()

作用:等待目标线程执行完毕后,当前线程再继续执行。

Thread t = new Thread(() -> System.out.println("子线程执行完毕"));//lambda表达式
t.start();
t.join(); // 等 t 执行完毕
System.out.println("主线程继续执行");

yield()

作用:暂停当前线程,让同优先级的其他线程有机会执行。

Thread.yield();

3.线程状态

interrupt()

作用:中断线程(不是强制停止,而是设置中断标志)。

 使用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 线程

isAlive()

作用:判断线程是否处于活动状态(即线程已经启动且尚未终止)。 

Thread t = new Thread(() -> {});
System.out.println(t.isAlive()); // false
t.start();
System.out.println(t.isAlive()); // true

 4. 线程优先级

setPriority(int newPriority) 

作用:设置优先级(范围1-10,5为默认)

Thread t = new Thread(() -> {});
t.setPriority(Thread.MAX_PRIORITY); // 设置为最高优先级

 getPriority()

作用:获取当前线程优先级

System.out.println(Thread.currentThread().getPriority());

 5. 线程守护

setDeamon(boolen on)

作用:设置线程为守护线程(主线程结束后,守护线程自动结束),必须在start()前使用。

Thread t = new Thread(() -> {
    while (true) {
        System.out.println("守护线程运行中...");
    }
});
t.setDaemon(true);
t.start();
Thread.sleep(1000);
System.out.println("主线程结束");

6.获取线程信息 

currentThread()

作用:获取当前正在执行的线程对象。

Thread t = Thread.currentThread();
System.out.println("当前线程: " + t.getName());

getName和setName(String name)

作用:获取/设置线程名称。

Thread t = new Thread(() -> {});
t.setName("工作线程");
System.out.println(t.getName());

7. 线程 ID

getId()

作用:获取线程唯一标识符

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线程知识的学习,如有错误,欢迎指正!

你可能感兴趣的:(java,开发语言)