最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Java多线程基础详解
时间:2026-05-27 15:00:02 编辑:袖梨 来源:一聚教程网
多线程编程是现代软件开发的核心技术之一,掌握线程创建与管理的不同方式对于提升程序性能至关重要。线程创建两种方式方式 1:继承 Thread 类通过继承Thread类并重写其run()方法来实现线程逻辑,调用start()方法启动线程执行。// 1.定义线程类
class MyThread extends Thread{
@Override
public void run() {
// 线程执行任务
for (int i = 0; i < 5; i++) {
System.out.println("线程执行:"+i);
}
}
}
// 测试
public class ThreadDemo {
public static void main(String[] args) {
MyThread t1 = new MyThread();
t1.start(); // 启动线程,自动执行run方法
}
}方式 2:实现 Runnable 接口采用Runnable接口可以突破单继承限制,在实际开发中应用更为广泛。// 1.实现接口
class MyRunnable implements Runnable{
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println("任务运行:"+i);
}
}
}
public class RunnableDemo {
public static void main(String[] args) {
MyRunnable task = new MyRunnable();
Thread t2 = new Thread(task);
t2.start();
}
}如何实现多线程// 1.定义线程类
class MyThread extends Thread{
@Override
public void run() {
// 线程执行任务
for (int i = 0; i < 5; i++) {
// 加上当前线程名字,你能看清谁在跑
System.out.println(getName() + " 执行:"+i);
}
}
}
// 测试
public class ThreadDemo {
public static void main(String[] args) {
// 创建 2 个线程
MyThread t1 = new MyThread();
MyThread t2 = new MyThread();
// 给线程起名字
t1.setName("线程A");
t2.setName("线程B");
// 启动 → 这才是多线程!
t1.start();
t2.start();
}
}
// 1. 定义任务(不是线程,是任务)
class MyRunnable implements Runnable{
@Override
public void run() {
for (int i = 0; i < 5; i++) {
// 打印当前线程名字,能看清谁在跑
System.out.println(Thread.currentThread().getName() + ":" + i);
}
}
}
public class RunnableDemo {
public static void main(String[] args) {
// 1. 创建任务
MyRunnable task = new MyRunnable();
// 2. 创建 2 个线程,执行同一个任务!!!
Thread t1 = new Thread(task, "线程1");
Thread t2 = new Thread(task, "线程2");
// 3. 启动两个线程 → 这就是多线程!
t1.start();
t2.start();
}
}线程生命周期线程从创建到销毁会经历多个状态:新建对象、调用start()进入就绪状态、获取CPU执行权、可能进入阻塞状态,最终任务完成或异常终止。sleep 线程休眠使用sleep方法可以让当前线程暂停执行指定毫秒数,期间会释放CPU资源。class SleepThread implements Runnable{
@Override
public void run() {
for (int i = 1; i 0){
System.out.println("剩余票数:"+ticket--);
}
}
}
// 多线程抢票,会出现重复票数、负数票
public class UnSafeTest {
public static void main(String[] args) {
Ticket ticket = new Ticket();
new Thread(ticket,"窗口1").start();
new Thread(ticket,"窗口2").start();
}
}
//synchronized 加锁解决安全问题
class SafeTicket implements Runnable{
private int ticket = 10;
// 锁对象
private final Object lock = new Object();
@Override
public void run() {
while (true){
// 同步代码块,同一时间只允许一个线程进入
synchronized (lock){
if(ticket