-
引言:Java线程是并发编程的核心,允许程序同时执行多个任务,提高效率。
-
线程概念:线程是操作系统调度的基本单位,Java通过Thread类和Runnable接口提供支持。
-
创建线程:
-
方法一:继承Thread类,重写run()方法。
-
方法二:实现Runnable接口,实现run()方法,然后传递给Thread对象。
-
示例代码:
// 方法一:继承Thread类 class MyThread extends Thread { public void run() { System.out.println("Thread is running"); } } // 方法二:实现Runnable接口 class MyRunnable implements Runnable { public void run() { System.out.println("Runnable is running"); } } public class Main { public static void main(String[] args) { MyThread t1 = new MyThread(); t1.start(); // 启动线程 Thread t2 = new Thread(new MyRunnable()); t2.start(); } }
-
(1) 启动线程:调用start()方法,使线程进入就绪状态。(2)中断线程:使用interrupt()方法。(3)等待线程:join()方法让当前线程等待另一个线程结束。(4)休眠线程:sleep()方法暂停线程执行。
-
try { Thread.sleep(1000); // 休眠1秒 } catch (InterruptedException e) { e.printStackTrace(); }
Java线程入门教程:基础知识与使用方法
Java线程是实现多任务处理的核心机制,它允许程序同时执行多个任务,提高应用程序的响应性和效率。线程是操作系统调度的基本单位,Java通过
Thread
类和Runnable
接口提供对线程的封装支持。下面我将逐步介绍Java线程的基础知识和使用方法,确保内容清晰易懂,并结合代码示例说明。
-
1. 线程的基本概念
什么是线程:线程是进程内的独立执行单元,一个进程可以包含多个线程,共享进程的资源(如内存)。线程由操作系统调度,允许多个任务并发执行3。
为什么使用线程:在需要并行处理时(如后台任务、UI响应),线程能显著提升性能。例如,Web服务器用线程处理多个客户端请求1。
线程状态:Java线程有新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)、等待(Waiting)和终止(Terminated)等状态。
2. 创建线程的两种方法
在Java中,创建线程主要有两种方式,均需重写run()方法(该方法包含线程执行的代码逻辑)。run()方法不能被直接调用,只能通过start()方法启动线程,使线程进入就绪队列等待CPU调度
方法一:继承Thread
类
-
优点:简单直接。
-
缺点:Java是单继承语言,如果类已继承其他类,则无法使用此方法。
-
示例代码:
class MyThread extends Thread { @Override public void run() { System.out.println("线程执行中: " + this.getName()); } } public class Main { public static void main(String[] args) { MyThread thread = new MyThread(); thread.start(); // 启动线程,进入就绪状态 } }
方法二:实现Runnable
接口
-
优点:更灵活,避免单继承限制;适合资源共享。
-
缺点:需额外创建
Thread
对象来启动线程。 -
示例代码:
class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("线程执行中: " + Thread.currentThread().getName());
}
}
public class Main {
public static void main(String[] args) {
Runnable task = new MyRunnable();
Thread thread = new Thread(task);
thread.start(); // 启动线程
}
}
3. 线程的基本操作
线程创建后,需管理其生命周期。以下是核心操作:
-
启动线程:调用
start()
方法,线程进入就绪状态,等待CPU分配时间片3。 -
中断线程:使用
interrupt()
方法请求终止线程,需在run()
中检查isInterrupted()
标志。
Thread thread = new Thread(() -> {
while (!Thread.currentThread().isInterrupted()) {
System.out.println("运行中...");
}
});
thread.start();
thread.interrupt(); // 发送中断请求
等待线程结束:join()
方法让当前线程等待目标线程终止
Thread thread = new Thread(() -> {
System.out.println("子线程完成");
});
thread.start();
thread.join(); // 主线程等待子线程结束
System.out.println("主线程继续");
线程休眠:sleep()
方法暂停线程执行指定时间(毫秒),会抛出InterruptedException
。
try {
Thread.sleep(1000); // 休眠1秒
} catch (InterruptedException e) {
e.printStackTrace();
}
4.线程安全与同步
-
问题:多个线程共享数据时可能引发竞态条件(如变量被同时修改)。
-
解决方法:使用
synchronized
关键字或Lock
接口实现同步class Counter { private int count = 0; public synchronized void increment() { // 同步方法 count++; } }
5. 总结与最佳实践
-
关键点:线程通过
start()
启动而非直接调用run()
;优先使用Runnable
接口以提高灵活性;避免资源竞争需同步。 -
应用场景:适用于后台任务(如文件下载)、GUI事件处理和服务器并发处理