Future

package java.util.concurrent;

public interface Future<V> {
    boolean cancel(boolean mayInterruptIfRunning);
    boolean isCancelled();
    boolean isDone();
    V get() throws InterruptedException, ExecutionException;
    V get(long timeout, TimeUnit unit)
            throws InterruptedException, ExecutionException, TimeoutException;
}
  • isCancelled:只有任务未启动,或者在完成之前被取消,才会返回true,表示任务已经被成功取消。其他情况都会返回false

子接口

  • RunnableFuture
  • FutureTask

Semaphore

Semaphore 主要用于控制对某组资源的访问权限,它维护了一个计数器,该计数器代表可用的许可数。线程在访问资源之前必须先获得许可,每次成功获得许可,计数器减一;释放资源时,计数器增加。当计数器为零时,后续的线程需要等待其他线程释放许可。

  • acquire() 方法是用来获取许可的,如果许可可用,它会立即返回,否则会一直阻塞直到有许可为止。
  • release() 方法用于释放许可,将计数器增加。如果有其他线程正在等待许可,那么释放许可后,其中一个等待的线程将被唤醒并获得许可。

简单使用:

import java.util.concurrent.Semaphore;

public class SemaphoreExample {
    public static void main(String[] args) {
        Semaphore semaphore = new Semaphore(3); // 创建一个初始许可数为3的Semaphore

        Thread thread1 = new Thread(() -> {
            try {
                semaphore.acquire(); // 获取一个许可
                System.out.println("Thread 1 acquired a permit");
                Thread.sleep(2000); // 模拟线程使用资源的时间
                semaphore.release(); // 释放许可
                System.out.println("Thread 1 released a permit");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });

        Thread thread2 = new Thread(() -> {
            try {
                semaphore.acquire();
                System.out.println("Thread 2 acquired a permit");
                Thread.sleep(2000);
                semaphore.release();
                System.out.println("Thread 2 released a permit");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });

        thread1.start();
        thread2.start();
    }
}

ThreadPoolExecutor

ThreadPoolExecutor提供的启动和停止任务的方法
(1)execute():提交任务,交给线程池执行
(2)submit():提交任务,能够返回执行结果 execute+Future
(3)shutdown():关闭线程池,等待任务都执行完
(4)shutdownNow():立即关闭线程池,不等待任务执行完

其他

SimpleDateFormat非线程安全


YOLO