温馨提示×

java 新建线程如何同步执行

小樊
81
2024-11-29 11:37:45
栏目: 编程语言

在 Java 中,要同步执行新建的线程,可以使用以下方法:

  1. 使用 synchronized 关键字:

在需要同步的方法或代码块上添加 synchronized 关键字。这将确保在同一时刻只有一个线程可以访问该方法或代码块。

public class MyRunnable implements Runnable {
    private final Object lock = new Object();

    @Override
    public void run() {
        synchronized (lock) {
            // 需要同步的代码
        }
    }
}
  1. 使用 ReentrantLock 类:

ReentrantLock 是一个可重入的互斥锁,提供了比 synchronized 更灵活的锁定机制。

import java.util.concurrent.locks.ReentrantLock;

public class MyRunnable implements Runnable {
    private final ReentrantLock lock = new ReentrantLock();

    @Override
    public void run() {
        lock.lock();
        try {
            // 需要同步的代码
        } finally {
            lock.unlock();
        }
    }
}
  1. 使用 CountDownLatch 类:

CountDownLatch 是一个同步辅助类,允许一个或多个线程等待直到一组操作完成。

import java.util.concurrent.CountDownLatch;

public class MyRunnable implements Runnable {
    private final CountDownLatch latch = new CountDownLatch(1);

    @Override
    public void run() {
        // 执行任务
        latch.countDown(); // 任务完成后,计数器减一
    }

    public void waitForTask() throws InterruptedException {
        latch.await(); // 等待任务完成
    }
}
  1. 使用 CyclicBarrier 类:

CyclicBarrier 是一个同步辅助类,允许一组线程相互等待,直到所有线程都准备好继续执行。

import java.util.concurrent.CyclicBarrier;

public class MyRunnable implements Runnable {
    private final CyclicBarrier barrier = new CyclicBarrier(2); // 设置为 2,因为有两个线程需要等待

    @Override
    public void run() {
        try {
            // 执行任务
            barrier.await(); // 等待其他线程完成任务
        } catch (InterruptedException | BrokenBarrierException e) {
            e.printStackTrace();
        }
    }
}

根据你的需求选择合适的方法来实现线程同步。

0