当前位置:首页 > 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

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

Java线程如何通讯

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

两个线程间交换数据:

Java线程如何通讯

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

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

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

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

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

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

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

相关文章

php线程实现

php线程实现

在PHP中实现多线程可以通过多种方式,以下是常见的方法和示例: 使用pthreads扩展 pthreads是PHP的一个多线程扩展,适用于PHP 7.2及以上版本(Windows需ZTS版本)。…

js 实现线程

js 实现线程

在JavaScript中实现类似线程的功能可以通过以下几种方法实现,尽管JavaScript本身是单线程的,但通过异步编程或Web Worker可以实现并行处理的效果。 使用Web Worker W…

js实现同步通讯

js实现同步通讯

同步通讯的实现方法 在JavaScript中,同步通讯通常指代码按照顺序执行,每一步操作完成后再进行下一步。以下是几种常见的同步通讯实现方法: 使用XMLHttpRequest同步请求 通过设置XM…

java如何实现线程

java如何实现线程

线程的实现方式 在Java中,线程的实现主要通过继承Thread类或实现Runnable接口来完成。以下是两种主要方法的详细说明。 继承Thread类 通过继承Thread类并重写run()方法,可…

java如何线程同步

java如何线程同步

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

java 如何开启线程

java 如何开启线程

开启线程的方法 在 Java 中开启线程可以通过多种方式实现,以下是几种常见的方法: 继承 Thread 类 通过继承 Thread 类并重写 run() 方法,可以创建并启动线程: class…