Java 的线程是程序中执行的最小单位,它允许程序同时执行多个任务,实现多任务并发执行的效果。在 Java 中,线程由 Thread 类表示,可以通过继承 Thread 类或实现 Runnable 接口来创建线程。
创建线程的方法:
- 继承 Thread 类:
我们可以创建一个继承自 Thread 类的子类,并重写其 run() 方法来定义线程的执行逻辑。然后通过调用子类的 start() 方法来启动线程。
class MyThread extends Thread {
public void run() {
System.out.println("This is a thread created by extending Thread class.");
}
}
public class Main {
public static void main(String[] args) {
MyThread thread = new MyThread();
thread.start();
}
}
- 实现 Runnable 接口:
另一种创建线程的方法是实现 Runnable 接口,并在实现类中重写 run() 方法。然后通过创建 Thread 对象并传入实现类的实例来启动线程。
class MyRunnable implements Runnable {
public void run() {
System.out.println("This is a thread created by implementing Runnable interface.");
}
}
public class Main {
public static void main(String[] args) {
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start();
}
}
以上是创建线程的两种常见方法,两种方法都可以达到创建线程的目的,但推荐使用实现 Runnable 接口的方式,因为 Java 支持单继承而多实现,通过实现接口可以更灵活地组织代码结构。
线程的管理:
-
线程的状态:
在 Java 中,线程有几种状态,包括新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和终止(Terminated)。我们可以使用Thread类的 getState() 方法来获取线程的状态。 -
线程的优先级:
Java 中的线程可以设置优先级,用来告诉线程调度器哪些线程更重要。可以使用 Thread 类的 setPriority() 方法设置线程的优先级,并使用 getPriority() 方法获取线程的优先级。 -
线程的同步:
在多线程环境下,可能会出现资源竞争和数据不一致的问题,可以使用同步机制来解决。Java 提供了 synchronized 关键字和 Lock 接口来实现线程的同步,确保多个线程对共享资源的安全访问。
class Counter {
private int count = 0;
public synchronized void increment() {
count++;
}
public synchronized int getCount() {
return count;
}
}
- 线程的等待和通知:
在多线程编程中,可能需要线程等待某个条件满足或者通知其他线程某个条件已经满足。Java 提供了 wait()、notify() 和notifyAll() 等方法来实现线程的等待和通知。
class WaitNotifyExample {
public void produce() throws InterruptedException {
synchronized (this) {
System.out.println("Producer thread running...");
wait(); // 线程等待
System.out.println("Producer thread resumed...");
}
}
public void consume() throws InterruptedException {
Thread.sleep(1000);
synchronized (this) {
System.out.println("Consumer thread running...");
notify(); // 通知等待中的线程
Thread.sleep(3000); // 模拟消费过程
}
}
}
- 线程的中断:
可以通过调用 Thread 类的 interrupt() 方法来中断线程的执行,然后在线程中检查中断状态并做出相应的处理。
class MyThread extends Thread {
public void run() {
while (!Thread.currentThread().isInterrupted()) {
// 线程执行逻辑
}
System.out.println("Thread interrupted!");
}
}
public class Main {
public static void main(String[] args) {
MyThread thread = new MyThread();
thread.start();
// 中断线程
thread.interrupt();
}
}
以上是 Java中 创建和管理线程的基本方法和技巧,通过合理地设计和管理线程,可以实现多任务并发执行,提高程序的性能和响应速度。在多线程编程中,需要注意线程安全和同步问题,以及合理地处理线程的生命周期和状态转换,确保程序的稳定性和可靠性。
-------------------end-------------------
我是武铭,目前在银行做开发,现在聚焦于 Java 开发和面试分享,感兴趣的小伙伴可以关注公众号:武铭聊编程,大家一起共同学习和进步。
武铭给大家准备了一些 面试简历 和 Java 面试题,大家感兴趣可以关注公众号获取,回复 100 获取 100 套简历模板,回复 210 获取210 道 Java 面试题,回复 面试手册 获取 最全的 Java 面试手册。