欢迎访问宙启技术站
智能推送

Java中的并发编程实现函数示例

发布时间:2023-06-26 13:52:36

并发编程是指在多个线程同时执行的情况下,同步修改共享资源的程序设计。Java中提供了很多并发编程的实现函数,本文将结合具体示例介绍Java中的并发编程实现函数。

1、synchronized关键字

synchronized关键字可以修饰方法和代码块,使得多个线程访问同一个对象时能够保证线程之间的同步,避免数据竞争。采用synchronized关键字实现线程同步的示例如下:

class MyClass {

    private static int count = 0;

    public synchronized static void increase() {

        count++;

    }

}

在上面的示例中,我们使用了synchronized关键字修饰了increase()方法。采用这种方式实现的线程同步,确保了任何时刻只有一个线程能够访问increase()方法,从而避免了数据竞争。

2、Lock接口

Lock接口比synchronized关键字更为灵活,它提供了更多的功能,如可重入锁、读写锁、公平锁等。使用Lock接口实现线程同步的示例如下:

import java.util.concurrent.locks.Lock;

import java.util.concurrent.locks.ReentrantLock;

class MyClass {

    private static int count = 0;

    private static Lock lock = new ReentrantLock();

    

    public static void increase() {

        lock.lock();

        try {

            count++;

        } finally {

            lock.unlock();

        }

    }

}

在上面的示例中,我们使用了ReentrantLock类实现了Lock接口。调用lock()方法获取锁,调用unlock()方法释放锁。

3、Semaphore信号量

Semaphore是一个计数信号量。可以通过调用acquire()方法获取信号量,通过调用release()方法释放信号量。Semaphore通常被用于限制同时访问某些资源的线程数量。使用Semaphore实现线程同步的示例如下:

import java.util.concurrent.Semaphore;

class MyClass {

    private static final int MAX_COUNT = 5;

    private static Semaphore semaphore = new Semaphore(MAX_COUNT);

    private static int count = 0;

    

    public static void increase() throws InterruptedException {

        semaphore.acquire();

        try {

            count++;

        } finally {

            semaphore.release();

        }

    }

}

在上面的示例中,我们使用Semaphore来控制同一时刻最多只有5个线程能够访问increase()方法。

4、CountDownLatch倒计时器

CountDownLatch是一个同步工具类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。使用CountDownLatch实现线程同步的示例如下:

import java.util.concurrent.CountDownLatch;

class MyClass {

    private static final int THREAD_COUNT = 5;

    private static CountDownLatch countDownLatch = new CountDownLatch(THREAD_COUNT);

    private static int count = 0;

    

    public static void increase() {

        count++;

        countDownLatch.countDown();

    }

    

    public static void main(String[] args) throws InterruptedException {

        for (int i = 0; i < THREAD_COUNT; i++) {

            new Thread(new Runnable() {

                @Override

                public void run() {

                    increase();

                }

            }).start();

        }

        countDownLatch.await();

        System.out.println(count);

    }

}

在上面的示例中,我们使用CountDownLatch来阻塞主线程,直到所有线程都执行完increase()方法并倒计时器变为0为止。

总结

本文介绍了四种Java中常见的并发编程实现函数,分别是synchronized关键字、Lock接口、Semaphore信号量和CountDownLatch倒计时器。不同的线程同步方式有各自的应用场景,开发者可以根据具体情况选择适合自己的方式来实现线程同步。同时,为了避免死锁等问题,应该注意线程同步机制的正确使用。