Java线程是Java程序中最小的执行单元,它允许多个任务并发执行,从而提高程序的执行效率,在Java中,线程是通过java.lang.Thread类来实现的,本文将介绍如何在Java中创建和管理线程。
一、创建线程的方式
1、继承Thread类
创建一个新类,继承自Thread类,然后重写run()方法,在run()方法中编写需要执行的任务代码,创建该类的对象并调用start()方法启动线程。
class MyThread extends Thread {
@Override
public void run() {
// 在这里编写需要执行的任务代码
System.out.println("线程运行中...");
}
}
public class Main {
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.start(); // 启动线程
}
}
2、实现Runnable接口
创建一个新类,实现Runnable接口,然后重写run()方法,在run()方法中编写需要执行的任务代码,接下来,创建Thread类的对象,将实现了Runnable接口的类的实例作为参数传递给Thread类的构造方法,调用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(); // 启动线程
}
}
二、线程的生命周期
Java线程的生命周期主要包括以下几个阶段:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead),线程的状态可以通过Thread类提供的getState()方法获取。
三、线程同步与通信
1、synchronized关键字
synchronized关键字可以用于修饰方法或者代码块,用于实现线程同步,当一个线程访问被synchronized修饰的方法或代码块时,其他线程需要等待该线程执行完毕后才能继续执行。
class Counter {
private int count = 0;
public synchronized void increment() { // 同步方法
count++;
}
}
2、wait()和notify()/notifyAll()方法
wait()方法可以使当前线程进入等待状态,直到其他线程调用notify()或notifyAll()方法唤醒该线程,notify()方法唤醒一个正在等待的线程,而notifyAll()方法唤醒所有正在等待的线程,这些方法必须在同步代码块或同步方法中使用。
class Message {
private String message;
private boolean hasMessage = false;
private final Object lock = new Object(); // 锁对象
public void put(String message) { // 同步方法
synchronized (lock) {
while (hasMessage) { // 如果已经有消息,则等待
try {
lock.wait(); // 使当前线程进入等待状态
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.message = message; // 设置消息内容
hasMessage = true; // 标记有消息了
lock.notifyAll(); // 唤醒所有等待的线程
}
}
}
四、线程池的使用
为了避免频繁地创建和销毁线程,提高系统性能,可以使用线程池来管理线程,Java提供了Executor框架来实现线程池的管理,常用的线程池有FixedThreadPool、CachedThreadPool和ScheduledThreadPool等。



还没有评论,来说两句吧...