Java 线程相关总结

Java 线程相关总结

线程的概念

线程是操作系统能够进行运算调度的最小单位,它被包含在进程中,是进程中的实际运作单位。

Java 中的线程

线程的创建

Java 中可以通过继承 Thread 类或实现 Runnable 接口来创建线程。

继承 Thread 类

public class MyThread extends Thread {
    @Override
    public void run() {
        // 线程需要执行的任务
    }
}

MyThread myThread = new MyThread();
myThread.start();

实现 Runnable 接口

public class MyRunnableTask implements Runnable {
    @Override
    public void run() {
        // 线程需要执行的任务
    }
}

MyRunnableTask myTask = new MyRunnableTask();
Thread thread = new Thread(myTask);
thread.start();

线程的状态

Java 线程有几种状态:

  • NEW:线程新建但是还没有开始执行
  • RUNNABLE:线程正在执行
  • BLOCKED:线程阻塞,正在等待获取锁
  • WAITING:线程在等待,等待其他线程发出通知(notify、notifyAll)
  • TIMED_WAITING:线程在等待,等待一定的时间(sleep、wait)
  • TERMINATED:线程执行完成或者被中断

线程的状态转换

线程状态转换的示例:

public class MyTask implements Runnable {
    private int count = 0;

    @Override
    public void run() {
        synchronized(this) {
            count ++;
            System.out.println(Thread.currentThread().getName() + "执行第" + count + "次");
            if (count == 3) {
                try {
                    System.out.println("线程等待...");
                    wait(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

MyTask myTask = new MyTask();
new Thread(myTask, "线程1").start();
new Thread(myTask, "线程2").start();

执行结果:

线程1执行第1次
线程2执行第1次
线程1执行第2次
线程2执行第2次
线程1执行第3次
线程等待...
线程2执行第3次

线程的同步

Java 中可以通过 synchronized 关键字来实现线程的同步。synchronized 可以用来修饰方法或者代码块。

public synchronized void syncMethod() {
    // 待同步的代码
}

public void syncBlock() {
    synchronized(this) {
        // 待同步的代码
    }
}

线程的通信

Java 中可以通过 wait()notify()notifyAll() 等方法来实现线程之间的通信。这些方法都需要放在 synchronized 块中,因为只有获得了锁后,才可以调用这些方法。

public class MyTask implements Runnable {
    private boolean flag = false;

    public synchronized void taskA() {
        while(!flag) {
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        System.out.println(Thread.currentThread().getName() + "开始执行任务A");
    }

    public synchronized void taskB() {
        flag = true;
        notifyAll();
        System.out.println(Thread.currentThread().getName() + "开始执行任务B");
    }

    @Override
    public void run() {
        if (Thread.currentThread().getName().equals("线程1")) {
            taskA();
        } else {
            taskB();
        }
    }
}

MyTask myTask = new MyTask();
new Thread(myTask, "线程1").start();
new Thread(myTask, "线程2").start();

执行结果:

线程2开始执行任务B
线程1开始执行任务A

总结

本文介绍了 Java 中线程的相关概念和使用方法,包括线程的创建、线程的状态、线程的同步、线程的通信等方面。在实际开发中,需要合理地处理好线程的状态和同步问题,确保程序的正确性和性能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java 线程相关总结 - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • 基于springcloud异步线程池、高并发请求feign的解决方案

    下面是关于基于Spring Cloud异步线程池、高并发请求Feign的解决方案的完整攻略。 一、背景说明 在面对互联网高并发、资源有限的场景中,如何提高系统的可用性是一个很大的挑战。其中,异步线程池和高并发请求Feign的结合使用,可以很好地解决这个问题。 二、实现步骤 1. 异步线程池 Spring Cloud框架提供了异步线程池的功能,可以实现在高并发…

    多线程 2023年5月16日
    00
  • 浅析PHP中Session可能会引起并发问题

    下面是详细讲解“浅析PHP中Session可能会引起并发问题”的完整攻略。 什么是Session Session是Web开发中常用的一种状态管理技术,用于在服务器端存储用户的状态信息,包括登录状态、购物车信息等。Session的工作方式是通过生成一个唯一的标识符(session_id)来标记用户访问的状态信息,然后将session_id保存在浏览器的Cook…

    多线程 2023年5月16日
    00
  • Java多线程中Lock锁的使用总结

    Java多线程中Lock锁的使用总结 什么是Lock? 在Java中,Lock是一种比synchronized更加灵活、功能更加强大的线程同步机制。它可以提供比传统的synchronized更为广泛的锁定操作。 Lock和synchronized的对比 锁的获取方式 synchronized是隐式获取锁,只要进入synchronized保护的代码段,锁就会自…

    多线程 2023年5月16日
    00
  • Java多线程编程中synchronized线程同步的教程

    针对Java多线程编程中synchronized线程同步的教程,我将提供如下攻略: 1. 什么是synchronized线程同步? 在Java中,多线程编程中的线程会因为多进程调度的因素而产生混乱,造成程序不可预期的后果。为了保证线程的执行顺序和互斥性,我们通常采用synchronized关键字对某一段代码进行加锁,只有当一个线程执行完这段被加锁的代码之后,…

    多线程 2023年5月17日
    00
  • java多线程之并发工具类CountDownLatch,CyclicBarrier和Semaphore

    Java多线程之并发工具类 在Java多线程编程中,有一些并发控制的工具类可以帮助我们实现更好的程序并发控制,其中比较常用的有三个类:CountDownLatch、CyclicBarrier和Semaphore。 CountDownLatch CountDownLatch是一种同步工具类,它允许一个线程等待多个线程完成操作。初始化时需要指定要等待的线程数量,…

    多线程 2023年5月16日
    00
  • Java基础之多线程

    Java多线程的基础知识 在 Java 编程中,多线程是非常常见的技术,多线程的使用可以在提高程序并发性能的同时,也增加了程序的复杂度,因此学好多线程技术对于 Java 开发人员来说是非常重要的。 1. 创建线程 在 Java 中创建一个线程有两种主要方法: 1.1. 实现 Runnable 接口 Runnable 接口是 Java 多线程中的一个基本接口,…

    多线程 2023年5月17日
    00
  • Java多线程中线程的两种创建方式及比较代码示例

    Java多线程是Java语言的一大特色,它允许在同一程序中同时运行多个线程,从而提高了程序的并发性。Java多线程中线程的创建有两种方式,分别是继承Thread类和实现Runnable接口。下面将针对这两种方式进行比较,并且提供相应的代码示例说明。 继承Thread类创建线程 继承Thread类创建线程是最简单明了的方式之一,只需重写Thread类的run(…

    多线程 2023年5月17日
    00
  • js异步接口并发数量控制的方法示例

    接下来我将详细讲解“js异步接口并发数量控制的方法示例”的完整攻略。 什么是异步接口 异步接口是指在请求接口的时候,不会阻塞后面的代码执行,而是会进行异步回调处理,等到服务器返回结果之后再执行接下来的操作。与之相对的是同步接口,同步接口会阻塞后面的代码执行,直到服务器返回结果之后才能继续执行下一步操作。 在Javascript中,我们通常使用XMLHttpR…

    多线程 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部