java线程菜鸟教程

  1. 引言:Java线程是并发编程的核心,允许程序同时执行多个任务,提高效率。

  2. 线程概念:线程是操作系统调度的基本单位,Java通过Thread类和Runnable接口提供支持。

  3. 创建线程

    • 方法一:继承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事件处理和服务器并发处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值