当前位置:首页 > Java

Java线程如何通讯

2026-02-05 02:20:41Java

Java线程通讯方法

Java线程通讯主要通过共享内存和消息传递实现,以下是几种常见方式:

共享变量

使用synchronized关键字保护共享变量,结合wait()notify()机制:

class SharedObject {
    private boolean flag = false;

    public synchronized void waitForFlag() throws InterruptedException {
        while(!flag) {
            wait();
        }
    }

    public synchronized void setFlag() {
        flag = true;
        notifyAll();
    }
}

BlockingQueue

利用线程安全的阻塞队列实现生产者-消费者模式:

BlockingQueue<String> queue = new LinkedBlockingQueue<>();

// 生产者线程
queue.put("message");

// 消费者线程
String message = queue.take();

CountDownLatch

适用于一次性线程同步场景:

CountDownLatch latch = new CountDownLatch(3);

// 工作线程
latch.countDown();

// 主线程
latch.await();

CyclicBarrier

可重复使用的线程屏障:

CyclicBarrier barrier = new CyclicBarrier(3, () -> 
    System.out.println("All threads reached barrier"));

// 工作线程
barrier.await();

Exchanger

两个线程间交换数据:

Exchanger<String> exchanger = new Exchanger<>();

// 线程A
String dataA = exchanger.exchange("Data from A");

// 线程B
String dataB = exchanger.exchange("Data from B");

Semaphore

控制资源访问的并发数:

Semaphore semaphore = new Semaphore(5);

// 线程获取许可
semaphore.acquire();
try {
    // 访问共享资源
} finally {
    semaphore.release();
}

Future和Callable

获取线程执行结果:

ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(() -> "Result");

String result = future.get();

PipedStream

线程间通过管道传输数据:

Java线程如何通讯

PipedInputStream in = new PipedInputStream();
PipedOutputStream out = new PipedOutputStream(in);

// 写线程
out.write("data".getBytes());

// 读线程
int data = in.read();

选择通讯方式时应考虑具体场景,对于简单同步需求可使用synchronized,复杂场景建议使用java.util.concurrent包中的高级工具类。

标签: 线程通讯
分享给朋友:

相关文章

如何在java中实现线程

如何在java中实现线程

实现线程的基本方法 在Java中实现线程主要有两种方式:继承Thread类和实现Runnable接口。 继承Thread类 通过继承Thread类并重写run()方法,可以定义一个线程任务。…

java线程如何关闭

java线程如何关闭

关闭Java线程的方法 Java线程的关闭可以通过多种方式实现,每种方式适用于不同的场景。以下是常见的几种方法: 使用标志位控制线程退出 通过设置一个标志位,线程在运行时检查该标志位,决定是否继续执…

java如何线程同步

java如何线程同步

线程同步的基本概念 在多线程环境中,当多个线程访问共享资源时,可能导致数据不一致或竞态条件。线程同步是确保线程安全访问共享资源的机制。Java提供了多种同步方式,包括内置锁、显式锁、原子类等。 sy…

java线程如何使用

java线程如何使用

创建线程的两种主要方式 在Java中,线程可以通过继承Thread类或实现Runnable接口来创建。继承Thread类需要重写run方法,实现Runnable接口则需要实现run方法。Runnabl…

如何关闭一个线程 java

如何关闭一个线程 java

关闭线程的方法 在Java中,可以通过多种方式安全地关闭线程。以下是几种常见的方法: 使用标志位控制线程终止 通过设置一个标志位来控制线程是否继续执行,线程在运行时定期检查该标志位,若标志位指示停止…