当前位置:首页 > 行业动态 > 正文

java并发编程的入门过程是什么

Java并发编程的入门过程

并发编程是计算机科学中的一个热门话题,它涉及到多个线程同时执行的问题,在Java中,我们可以使用多线程来实现并发编程,本文将介绍Java并发编程的入门过程,包括线程的创建、同步与互斥、线程池等内容。

线程的创建

1、1 继承Thread类

要创建一个新的线程,可以通过继承Thread类并重写其run()方法来实现。

class MyThread extends Thread {
    @Override
    public void run() {
        // 在这里编写线程要执行的任务
    }
}

1、2 实现Runnable接口

另一种创建线程的方法是实现Runnable接口,并将其作为参数传递给Thread类的构造函数。

class MyRunnable implements Runnable {
    @Override
    public void run() {
        // 在这里编写线程要执行的任务
    }
}
public class Main {
    public static void main(String[] args) {
        MyRunnable myRunnable = new MyRunnable();
        Thread thread = new Thread(myRunnable);
        thread.start();
    }
}

同步与互斥

2、1 synchronized关键字

synchronized关键字可以用于修饰方法或者代码块,表示同一时刻只能有一个线程访问被修饰的方法或代码块。

public class Counter {
    private int count = 0;
    public synchronized void increment() {
        count++;
    }
}

或者:

public class Counter {
    private int count = 0;
    public void increment() {
        synchronized (this) {
            count++;
        }
    }
}

2、2 ReentrantLock类(可重入锁)

ReentrantLock是一个可重入的互斥锁,它提供了与synchronized类似的功能,但更加灵活。

import java.util.concurrent.locks.ReentrantLock;
public class CounterWithLock {
    private int count = 0;
    private ReentrantLock lock = new ReentrantLock();
    public void increment() {
        lock.lock();
        try {
            count++;
        } finally {
            lock.unlock();
        }
    }
}

线程池

3、1 ThreadPoolExecutor类(线程池)

ThreadPoolExecutor是一个线程池实现,它可以自动管理线程的创建和销毁。

import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
@Configuration // Spring框架配置类,需要引入spring-context依赖包(如:spring-boot-starter-web)才能使用@Component注解进行标注,如果不是Spring框架项目,则无需添加@Configuration注解,其他部分代码保持不变。
0